|
|||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||
|
Форми Windows,
графічний вивід і друк
Майже у всіх матеріалах по .NET-программированию, публікованих в журналах
і Інтернеті, основна увага приділяється web-службам, використанню броузера
як платформи програмування, ASP .NET і іншим темам, так або інакше пов'язаним з
Web. Численні удосконалення в області графічного Windows-программирования
на стороні клієнта удостоюються хіба що коротких згадок. Як би дивно це
не звучало для продукту Microsoft, про програмування графічних застосувань в
Visual Studio було сказано дуже мало хорошого; адже в цій області з'явилися багато
нововведень, яких програмісти VB чекали протягом декількох років! Безперечно,
програмування на платформі броузера грає все більш важливу роль, але і традиційні
клієнтські Windows-приложения вмирати не збираються. У цьому розділі ми спробуємо
виправити це упущення і познайомимо читача з основними принципами програмування,
необхідного для побудови графічних застосувань в VB .NET. Ми не витрачатимемо час на просторові міркування про технології прискореної розробки додатків (RAD, Rapid Application Development) в IDE [ У VB .NET, як і в колишніх версіях VB, підтримується візуальна побудова призначеного для користувача інтерфейсу, а нові властивості (такі, як Anchor і Dock) значно спрощують його розробку. ]і на описи властивостей, методів і подій різних елементів — для нормального викладу цього матеріалу знадобилася б книга удвічі більшого об'єму. Замість цього ми поглянемо на те, що відбувається з погляду програміста. Сподіваємося, читач досконально знатиметься на тому, як програмуються графічні застосування в .NET, і надалі зможе вільно користуватися документацією або знайде додаткову інформацію в книгах, присвячених графічному програмуванню. Після загальних
відомостей про форми і елементи ми познайомимося із загальними принципами графічного
програмування в VB .NET. У цій області нова мова декілька відрізняється від
колишніх версій VB (наприклад, з нього зникли знайомі функції-примітиви Сircle
і Line). Далі розглядається тема друку, який в .NET є окремим
випадком графічного виводу. Хоча нові можливості друку невимірний ширше
за тих, які підтримувалися в колишніх версіях VB, знайомий об'єкт Pri nter
тепер не підтримується, і підтримка друку в програмах тепер вимагає додаткових
зусиль.
Для
роботи з формами в колишніх версіях VB використовувався механізм Ruby Forms. Він
був версією програми Ruby, написаної Аланом Купером (Alan Cooper); в результаті
об'єднання Ruby з Quickbasic з'явився Vb11. Таким чином, розробка
графічних застосувань в колишніх версіях VB залежала від механізму форм, робота
якого була практично повністю прихована від програміста. Стартова форма,
немов по чарівництву, з'являлася на екрані, а елементи розміщувалися на формі
програмістом на стадії конструювання [ У Vb6 елементи могли додаватися
і під час роботи програми, але дана можливість майже не використовувалася
із-за украй незручного механізму перехоплення подій в цих елементах. ].
У програмах С/с++ процес ручного створення вікон і елементів на формах був справою
в кращому разі непростим, і в цій області VB володів безперечними перевагами.
Втім, у цього чарівництва була і оборотна сторона — механізм Ruby Forms був
недостатньо гнучким. Він погано розширювався, і програмістові доводилося миритися
зі всіма недоліками в його реалізації. Можливості використання форм і елементів
VB були обмежені; у будь-яких нестандартних ситуаціях програмістові доводилося
широко використовувати функції API і перехоплювати стандартні повідомлення Windows
в потворних конструкціях з субклассированієм [ Деякі пакети незалежних
фірм (наприклад, Desa ware Spy Works) спрощували процес субклас-сированія, але
завдання все одно залишалося непростим. ]. Навіть таке просте завдання, як
створення списку, з прискореним пошуком вимагало виклику функції API; стандартна
операція включення нових рядків в список ускладнювалася тим, що властивість Items
списку була доступна тільки для читання (на щастя, в VB .NET ці проблеми вирішуються
елементарно [ Наприклад, щоб швидко заповнити список, досить привласнити
колекцію властивості Datasource. ]). Більш
того, багато програмістів не розуміли, чим же насправді були форми VB — класами
або екземплярами класів? У якомусь сенсі і тим і іншим. В результаті програма
виглядала вельми дивно: Forml.Show '
Я - екземпляр Dim
newform As New Forml ' А зараз я - клас newform.Show Програмісти вважають
за краще працювати з логічними і послідовними моделями, а з погляду
ООП механізм форм в ранніх версіях часто виглядав як нагроможденіє
штучних і неузгоджених «латок». У VB .NET ситуація повністю
змінилася. Тут форми є екземплярами класу Windows. Forms. Form, і
поведінка форм може змінюватися за допомогою спадкоємства точно так, як і
поведінка будь-яких інших класів .NET Framework. Наприклад, код спеціалізованої
форми може починатися з наступного заголовка: Public
Class Myform Inherits System.Windows.Forms.Form Після цього
форма наділяється новими можливостями, для чого програміст або перевизначає
члени батьківського класу Form, або додає в нього нові члени, як для
будь-якого іншого класу (див. розділ 5). У колишніх версіях VB
елементи навіть не вважалися за повноцінні класи, тому команди на
зразок наступної були неприпустимими: Dim mybutton
As New Commandbutton Перед нами
класичний приклад логічного зв'язку «є окремим випадком»,
ідеально відповідний для спадкоємства, проте програміст не міг визначити новий
варіант кнопки як похідний від базового класу стандартної кнопки. Можливості створення
нестандартних елементів, що з'явилися в Vb5, були засновані на включенні
і делегуванні, причому в цьому процесі використовувалася одна з самих непередбачуваних
програм-майстрів (wizards) — не говорячи вже про те, що елементи, побудовані
в Vb5 і 6, дещо відрізнялися від елементів, побудованих на інших мовах (наприклад,
C++ і Delphi). У .NET елементи і
форми є класами. Як буде показано нижче в цьому розділі, VB .NET дозволяє визначити
новий клас текстового поля, що починається із заголовка наступного
вигляду: Public
Class Positivelntegertextbox Inherits System.Windows.Forms.TextBox Далі програміст
перевизначає або додає методи, як в будь-якому іншому класі, причому отриманий
елемент нічим не відрізняється від елементів, написаних на С# або керованому C++. Коротше
кажучи, в попередніх версіях VB графічні застосування будувалися на вельми хисткій
і ненадійній основі, яка до того ж не була повною мірою об'єктно-орієнтованою.
Перехід до єдиної програмної моделі в рамках об'єктно-орієнтованої версії
VB зажадав корінного перегляду цієї структури. Так з'явився новий простір
імен Windows.Forms.
|
|
|||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||