|
|||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||
|
Додавання
нових властивостей
На
наступному кроці клас буде доповнений властивостями Minvalue і Maxvalue. Програмна
реалізація цих властивостей виглядає вельми прямолінійно. При створенні екземпляра
змінним привласнюються значення 1 і максимальне значення типу Long відповідно.
Надалі необхідно простежити за тим, щоб властивість Minvalue не опинилася
менше 1, а властивість Maxval ue не перевищувало граничної величини: Private m_min As Long = 1 Private m_max As Long = Long.MaxValue Public Property
Minvalue()As Long Get Return m_min
End Get Setcbyval Value As Long) m_min = Math.Maxd,Value) End Set End
Property Public Property
Maxvalue()As Long Get Return m_max
End Get Set(Byval Value As Long) m_max =Math.Min(m_min.Value) End Set End Property
Якщо включити цей код в проект і відкомпілювати його, властивість підтримуватиметься
елементом, але не відображатиметься у вікні властивостей. Проблема вирішується установкою атрибуту
Browsable для імені властивості: <Browsable(True)>
Public Property Minvalue Зразковий
вид вікна властивостей при установці атрибуту Browsable для властивостей Minvalue і Maxvalue
показаний на мал. 8.18.
Мал.
8.18. Властивості
Maxvalue і Minvalue у вікні властивостей Як бачите,
нестандартна властивість відображається у вікні властивостей, а властивості Maxvalue і Minvalue
виводяться з початковими значеннями, які їм були привласнені. Ще цікавіше
те, що вікно властивостей відкидає будь-які спроби зміни властивостей способом, забороненим
в програмі (наприклад, привласнення Minvalue значення, меншого 1). Щоб властивість
не відображалася у вікні властивостей, досить встановити для нього атрибут <Browsable(False)>.
Заборона може встановлюватися як для нових, так і для перевизначуваних властивостей.
Наприклад, наступний фрагмент прибирає стандартна властивість Text спеціалізованого
текстового поля з вікна властивостей: <Browsable(False)> Public Overrides Property Text()
As String Get Return Mybase.Text End Get Set(Byval
Value As String) Mybase.Text = Value End Set End
Property Як видно
з мал. 8.19, властивість Text перестає відображатися у вікні властивостей.
Мал.
8.19. При установці
атрибуту Browsable властивість Text не відображається
Ієрархія
простору імен System.Windows.Forms
Розглянувши
прості можливості використання простору імен Windows . Forms на конкретних
прикладах, ми переходимо до ієрархії класів, показаної на мал. 8.20. Діаграма
виглядає вельми страхітливо, але ми приділимо основну увагу головній лінії спадкоємства: System.ComponentModel
.Component > Control З мал. 8.20
видно, що класи форм і елементів є похідними від класу Control.
Наприклад, генеалогія класу Form виглядає так: Scrollablecontrol >Containercontrol > Form
Мал.
8.20. Ієрархія класів простору імен Windows.Forms Текстове
поле входить в іншу гілку: Control > Textboxbase > Richtextbox > Textbox Ієрархія
основних різновидів кнопкових елементів виглядає так: Control > Buttonbase >
Button >
Checkbox >
Radiobutton Клас Control
вміщає в себе найбільшу кількість функцій (більше 300) і володіє найбільшими
функціональними можливостями. Класи форм і елементів оголошуються похідними
від членів класу Control. Клас Component
є базовим класом для всіх компонентів простору імен System. Wi ndows.
Forms. У нім зібрані члени, необхідні для реалізації включення (зокрема, розміщення
елементів на формі або дочірніх вікон MDI в батьківському вікні MDI). В
основному вони реалізовані у вигляді методів інтерфейсу Icomponent. Оскільки клас Component
також займається звільненням ресурсів, що витрачаються при візуальній
розробці, він реалізує Idisposable. Оскільки
клас Control є базовим для елементів і форм, він підтримує
багато операцій призначеного для користувача інтерфейсу, зокрема обробку подій
клавіатури і миші. Крім того, він визначає колір, позицію і розмір форми або
елементу.
Використання засобів базового класу Control (і зокрема, обробка
ключових подій) розглядається в наступному розділі. Проте спочатку ми продовжимо шлях
до форм в ієрархії класів System. Windows. Forms. Оскільки серед предків
класу Form числиться Scrollablecontrol, форми VB володіють корисною особливістю,
яку оцінить кожен, хто намагався реалізувати форму з прокруткою в Vb6: При виході за
грашци поточного вмісту форма автоматично прокручується. Погляньте на
мал. 8.21 — на нім зображена форма, що дозволяє прокручувати дуже велику
фрактальну картинку (більше 5 Мбайт в запакованому вигляді!) з базовим безліччю
Мандельброта. За інформацією про безліч Мандельброта звертайтеся за адресою
www.olympus.net/personal/dewey/mandelbrot.html. Прокрутку
форм можна протестувати на будь-якому зображенні достатньо великих розмірів:
Мал.
8.21. Прокрутка
зображення базового безліч Мандельброта
1 Private Sub Forml_load(Byval sender As System.Object,_ Byval e As System.EventArgs)Handles
Mybase.Load 2 Me.AutoScroll
= True 3 Me.VScroll
= True 4 Me.HScroll
= True 5 Dim abigbox
As Rectangle = Rectangle.Inflate _ 6 (Me.ClientRectangle.
6. 6) 7 Pictureboxl.Bounds
= abigbox 8 ' Передбачається,
що графічний файл знаходиться в підкаталозі \bin 9 Pictureboxl.Image
= Image.FromFile("Mandelbrot Set.bmp") 10 End Sub Головне місце в
цьому лістингу займає рядок 2, в якій властивості Autoscrol 1, визначуваній в
класі Scrollabl e Control, задається значення True. Без цього прокрутка працювати не
буде. Рядки 3 і 4 указують на те, що у вікні повинні відображатися обидві смуги прокрутки
(вертикальна і горизонтальна). У рядку 5 загальний метод класу System.Drawing.Rectangle створює
прямокутний об'єкт, в 6 разів більший клієнтській області форми. Рядок 7
приводить графічне поле до заданого розміру, привласнюючи прямокутник властивості Bounds,
присутній у всіх елементах. Як вказано в коментарі, рядок 9
припускає, що файл з растровим зображенням знаходиться в підкаталозі \bin каталога
рішення — в реальній програмі для визначення місцезнаходження файлу слід
було б викликати діалогове вікно Open File.
Клас Control містить більше
300 членів, і описати їх всіх (або хоч би велику частину) в одному розділі просто
неможливо. Отже, вам все одно доведеться звернутися до електронної документації
[ До речі кажучи, пакет форм Windows автоматично пізнає
операції з колесом миші і забезпечує прокрутку форми/елементу там, де
це має сенс. Таким чином, в більшості випадків вам не доведеться використовувати нову
подію Control.MouseWheel. ]. Проте події клавіатури і події перевірки,
що займають важливе місце в роботі елементів, декілька відрізняються від
своїх прототипів з Vb6, і при роботі з ними слід пам'ятати про деякі нюанси.
|
|
|||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||