:: Меню ::

Головна
  • Про сайт
  • Введення
  • Середовище програмування VB .NET: Visual Studio .NET
  • Вирази, оператори і передача управління
  • Класи і об'єкти
  •  Спадкоємство і інтерфейси
  • Обробка подій і делегати
  • Обробка помилок в VB .NET
  • Форми Windows, графічний вивід і друк
  • Уведення-виведення
  •  Багатопотокові застосування
  • Підтримка баз-даних в VB .NET
  • Короткий огляд ASP .NET
  • Складки .NET, установка додатків і COM Interop
  • Книга для гостей
    Контакти
    Добавити у вибране

    :: Друзі ::

     
     

    :: Лічильники ::

    = =

     

     

     

     

    Створення діалогових вікон

    Щоб вивести власне діалогове вікно, створіть форму, задайте її властивостям Controlbox, Minimizebox і Maximizebox значення False, а властивості Modal — значення True. Форму слід виводити методом Showdialog в режимі модального діалогового вікна. Якщо при цьому задати властивість Topmost рівним True, діалогове вікно розташовуватиметься поверх всіх вікон на екрані (і вам вже не доведеться використовувати функцію API Setwindowpos).

    Проте поведінка стандартних кнопок дещо змінилася в порівнянні з Vb6. Властивості Default і Cancel не підтримуються, тому відповідні елементи-кнопки призначаються властивостям Acceptbutton і Cancel Button:

    Me.AcceptButton = btnok Me.Cancel Button = btncancel

    Після виклику Showdialog програма може дізнатися, яка кнопка була натиснута на формі, за допомогою властивості Dial ogresult кнопки або самої форми (натиснення кнопки із заданою властивістю Dialogresul t приводить до автоматичного закриття форми, на якій ця кнопка знаходиться).

    Розміщення елементів на формі під час виконання

    До виходу Vb6 існував лише один спосіб розміщення елементів на формі під час виконання програми — масиви елементів. У Vb6 з'явився зручніший режим динамічного додавання елементів, але і в цьому випадку не обходилося без проблем з обробкою подій для доданих елементів. У VB .NET цей процес піддався істотним змінам. Наприклад, створіть новий додаток Windows і включите в нього наступний фрагмент:

    1 Private Sub Forml_load(Byval sender As System.Object,ByVal e As _

    2 System.EventArgs) Handles Mybase.Load

    3 Dim newbutton As New System.Windows.Forms.Button()

    4 ' Задати властивості newbutton

    5 With newbutton

    6 .Visible =True

    7 .Size =New Size(l00.l00)

    8 ' .Text ="I'm а new button"

    9 ' Зазвичай тут задаються і інші властивості

    10 End With

    11 Me.Controls.Add(newbutton)

    12 Addhandler newbutton.Click.AddressOf Me.newButton_Click

    13 End Sub

    14 Public Sub newbutton_click(Byval sender As _

    15 System.Object.ByVal e As System.EventArgs)

    16 Msgbox("You clicked on my new button")

    17 End Sub

    У рядку Із створюється нова кнопка, а в рядках 5-10 зручний скорочений запис With використовується для завдання ряду властивостей об'єкту newbutton. Тільки у рядку 11 нова кнопка розміщується на формі. Рядок 12 знову демонструє чудову гнучкість механізму обробки подій .NET: код, що міститься в строках 14-17, призначається обробником події для кнопки. Можливий результат виконання програми показаний на мал. 8.15.

    Мал. 8.15. Створення кнопки під час виконання програми

    Спадкоємство форм

    Перш за все слід сказати, що «візуальне спадкоємство», що часто згадується в рекламних матеріалах по VB .NET, існує лише в хворій уяві фахівців з маркетингу. Насправді мова йде про тому, що форми, створені в програмі, можуть використовуватися як основа для визначення нових форм за допомогою спадкоємства. Звичайно, це вельми зручно і корисно, але нічого принципово нового в такому спадкоємстві не немає. Клас форми, похідний від Windows. Forms. Form і доповнений спеціалізованими властивостями, методами і подіями, надалі може використовуватися як базовий для визначення нових класів.[ Історія з «візуальним спадкоємством» як не можна краще демонструє тупість фахівців з реклами. Можливо, ефектний термін уразить некомпетентноге менеджера, але у програмістів він лише викликає роздратування. ]

    Припустимо, ви хочете створити для своєї організації вікно-заставку (splash screen), яке окремі підрозділи доповнюватимуть своїми даними. Базова форма створюється таким чином:

    1. Виконаєте команду File > New > Project.
    2. Виберіть тип додатку Windows Application, введіть в поле Name рядок Splashscreeribase і натисніть кнопку ОК.

    Припустимо, ви хочете перетворити стандартний додаток Windows в бібліотеку класів, щоб відкомпілювати його в DLL замість ЕХЕ-файла. Найпростіше це робиться так:

    1. Клацніть правою кнопкою миші в рядку Splashscreenbase вікна рішення і виберіть в контекстному меню команду Properties.
    2. Виберіть в списку Output Type, що розкривається, рядок Class Library (замість Windows Application). Натисніть кнопку ОК.
    3. Сконструюйте форму, розмістите на ній потрібні елементи, реалізуйте властивості, методи і події.
    4. Відкомпілюйте програму.

    Після побудови бібліотеки DLL залишається лише включити посилання на неї в рішення, після чого класи DLL використовуються в програмі нарівні з рештою класів. При виконанні команди Project > Add Inherited Form можна доручити IDE включити в проект весь необхідний код, для чого досить відповісти на декілька питань в діалогових вікнах. З іншого боку, метушня з діалоговими вікнами виглядає трохи безглуздо, оскільки після включення посилання на DLL в проект залишається лише привести перший рядок додатку до наступного вигляду:

    Public Class Form1

    Inherits Splashscreenbase. Form1

    Все останнє за вас зробить механізм спадкоємства! Цей спосіб особливо хороший тим, що робота дизайнера автоматично синхронізується з успадкованою формою.

    Побудова нестандартних елементів на базі спадкоємства

    Спадкоємство застосовується при побудові не тільки нових форм, але і нових елементів. Допустимо, ви хочете створити текстове поле, призначене для введення тільки цілих чисел. Як завжди, все починається з оголошення нового класу:

    Public Class Positivelntegertextbox

    Inherits System . Windows . Forms . Textbox

    Залишається лише запрограмувати поле на потрібну поведінку. У частині цього розділу, що залишилася, буде показано, як клас Positi velntegertexbox наповнюється спеціалізованими властивостями, подіями і методами.

    Щоб скоротити об'єм цього прикладу, ми обмежимося спрощеною версією елементу. Зокрема, проблеми ліцензування і безпеки взагалі не розглядаються — за додатковою інформацією звертайтеся до серйозніших книг, присвячених програмуванню елементів в .NET.

    Отже, створіть нову бібліотеку класів і включите в рішення посилання на збірку Windows.Forms.dll.


    Ми починаємо роботу з бібліотеки класів, а не з проекту типу User Control, тому що він краще підходить для елементів, написаних «на порожньому місці». Якщо ви захочете побудувати елемент, що містить дещо інших елементів, виберіть в діалоговому вікні New Project тип Windows Controls Library — у вашому розпорядженні опиниться контейнер, призначений для побудови складного елементу за допомогою включення.

    Перевизначення події

    Почнемо з перевизначення подій базового класу. Наприклад, подія Onchange допоможе запобігти введенню в полі всього, що не є цілим числом. Наступний обробник дозволяє вводити або вставляти з буфера тільки позитивні цілі числа:

    1 Public Class Positivelntegertextbox

    2 Inherits System.Windows.Forms.TextBox

    3 Protected Overrides Sub Ontextchanged(Byval e As Eventargs)

    4 Mybase.OnTextChanged(e)

    5 If Not (Isnumeric(Me.Text)) Then

    6 Me.Text - String.Empty

    7 Else

    8 Dim temp As Decimal

    9 temp = Ctype(Me.Text.Decimal)

    10 If temp - Math.Round(temp.0) <> 0 Then

    11 Me.Text = String.Empty

    12 End If

    13 End If

    14 End Sub

    15 End Class

    У рядках 1 і 2 оголошується спеціалізована версія звичайного текстового поля. Оскільки при спеціалізації на базі спадкоємства зберігаються всі члени базового класу, які не піддалися явним змінам, вам не доведеться удаватися до послуг програми-майстра (як в Vb6), щоб вирішити питання з незмінними властивостями — наприклад, з основним кольором. При перевизначенні подій в похідному класі зазвичай викликається обробник базового класу, як в рядку 4. Необхідність цього рядка пов'язана з тим, що ми не програмуємо обробку цієї події від початку і до кінця, а хочемо скористатися успадкованими аспектами поведінки базового класу. У рядках 5-6 запобігає введення нечислових даних типу 32skiddoo. У рядках 9-12 з текстового поля віддаляються дробові числа; за допомогою вбудованої функції Round програма переконується в тому, що закруглене число збігається з початковим. Слід відмітити, що просте знищення введеного тексту виглядає декілька жорстоко по відношенню до користувача. У витонченішій програмі слід було б зберегти попередній текст, щоб відновити його при необхідності. В цьому випадку одна помилка введення не приводитиме до повної втрати введених даних.

    На цій стадії приведений вище фрагмент можна відкомпілювати в DLL і отримати цілком працездатний елемент. Щоб протестувати елемент після компіляції, створіть новий додаток Windows і помістите елемент на панель елементів:

    1. Виконаєте команду Tools > Customize Toolbox (або натисніть Ctrl+t).
    2. Перейдіть на вкладку .NET Framework Components.
    3. Натисніть кнопку Browse і виберіть DLL нужнопа^лемента (бібліотека знаходиться в підкаталозі \bin основного каталога рішення).

    Елемент поміщається на вкладку .NET Framework Components (мал. 8.16).

    Мал. 8.16. Нестандартний елемент на вкладці .NET Framework Components

    Мал. 8.17. Нестандартний елемент на панелі елементів

    Нестандартний елемент розміщується в нижній частині панелі (мал. 8.17). Двічі клацніть в рядку Poslti velntegertextbox, і елемент з'явиться на формі. Звернете увагу: наш простий елемент володіє всіма властивостями звичайних текстових полів і особливостями поведінки, властивими текстовим полям в режимі конструювання. Все це було автоматично успадковано від класу текстових полів Windows. Forms. Textbox без щонайменших зусиль з вашого боку.

    Елемент, поміщений на панель елементів, залишається на ній і може використовуватися в майбутніх проектах. Щоб видалити елемент з панелі, клацніть на нім правою кнопкою миші і виберіть команду Delete.

    Додавання нових подій

    Додати підтримку нової події в елемент нітрохи не складніше, ніж включити обробник події в клас (ця тема розглядалася в розділі 6). Припустимо, кожного разу, коли користувач вводить щось відмінне від позитивного цілого числа, елемент повинен ініціювати подію Baddataentered. Новий код класу виділений жирним шрифтом:

    Public Class Positivelntegertextbox

    Inherits System.Windows.Forms.TextBox

    Public Event Baddataentered(Byval Sender As Object _

    Byval e As Eventargs)

    Protected Overrides Sub Ontextchanged(Byval e As Eventargs)

    Mybase.OnTextChanged(e)

    If Not (Isnumeric(Me.Text)) Then Me.Text = String.Empty

    Raiseevent Baddataentered(Me. New System.EventArgs()) Else

    Dim temp As Decimal temp = Ctype(Me.Text,Decimal)

    If temp = Math.Round(temp.0) <> 0 Then

    Me.Text = String.Empty

    Raiseevent Baddataentered(Me, New System.EventArgs())

    End If

    End If

    End Sub

    End Class

    У елементах VB існує поняття події за умовчанням (default event). Подія за умовчанням спрацьовує автоматично при подвійному клацанні на екземплярі елементу в дизайнерові форм. Подія за умовчанням задається за допомогою спеціального атрибуту. Атрибути відповідають екземплярам класу System.Attribute; атрибут Def aul tevent входить в простір імен System. Componentmodel. У програмі атрибути полягають в кутові дужки, а при установці атрибуту Defaul tevent указується ім'я події в лапках. Щоб призначити подію Baddataentered подією за умовчанням для даного елементу, приведіть початок класу до наступного вигляду:

    Imports System.ComponentModel

    <Defaultevent("Baddataentered")> Public Class _

    Positivelntegertextbox

    Inherits System.Windows.Forms.TextBox

     




    :: Наша кнопка ::

    Отримати код:

    Підтримайте наш сайт і розмістіть нашу кнопку на своєму ресурсі.


    :: Реклама ::

    Скачати безкоштовно програму Microsoft Front Page 2003


    :: Посилання ::

    -


     

     

     


    Copyright ©