Знайомство з Microsoft. NET Framework 2.0. Частина 2. Windows Forms 2.0, Інтеграція додатків і даних, Бази даних, статті

Частина 1


Зміст



У попередньому номері журналу ми почали знайомство з новою версією платформи Microsoft. NET. Були розглянуті основні зміни і доповнення в бібліотеці класів і виділені основні функціональні групи, до яких ці зміни стосуються. У даній статті ми більш детально поговоримо про зміни в бібліотеці класів, що відносяться до створення Windows-додатків. Ця область бібліотеки класів містить простір імен System.Windows.Forms, в якому визначені власне форми, базові та розширені інтерфейсні елементи, компоненти і стандартні діалогові панелі, а також підлеглі простору імен, що відповідають за більш специфічні операції, а саме:


Знайомство з новинками в Windows Forms ми почнемо з обговорення нових компонентів, що використовуються для створення інтерфейсів Windows-додатків. Дані компоненти можна розділити на наступні групи:


Професійні меню, статусні панелі і панелі інструментів


Для створення професійних інтерфейсних елементів Windows-додатків, які відповідають останнім вимогам ергономіки і схожих з інтерфейсними елементами додатків компанії Microsoft, пропонується використовувати новий набір інтерфейсних компонентів, що входять до складу Windows Forms 2.0. До цих компонентів відносяться:


Слід зазначити, що компоненти MainMenu, ContextMenu, StatusBar і ToolBar як і раніше підтримуються (за умовчанням вони не відображаються в панелі ToolBar Visual Studio 2005) і можуть використовуватися в Windows Forms 2.0, але для створення більш професійних інтерфейсів рекомендується застосовувати нові компоненти, які будуть розглянуті далі.

Оскільки компоненти MenuStrip і StatusStrip є спадкоємцями компонента ToolStrip, а компонент ContextMenuStrip походить від спадкоємця компонента ToolStrip – ToolStripDropDownMenu, спочатку ми розглянемо компонент ToolStrip.

Рис. 1. Приклад імітації інтерфейсу Microsoft Outlook за допомогою нових інтерфейсних елементів Windows Forms 2.0

Компонент ToolStrip


Даний компонент служить в якості базового класу для компонентів, що реалізують меню і статусні панелі, а також для створення панелей інструментів. Створювані за допомогою компонента ToolStrip панелі схожі на інструментальні панелі в таких продуктах, як Microsoft Windows XP, Microsoft Office, Microsoft Internet Explorer, і володіють широкими можливостями настройки, включаючи підтримку візуальних шаблонів (Themes), а також підтримують динамічну зміну розташування елементів.

Компонент ToolStrip може служити контейнером для наступних компонентів:


Крім цього можна використовувати компонент ToolStripControlHost для розміщення в інструментальній панелі будь-яких інших компонентів Windows Forms.

Компонент ToolStrip забезпечує базову функціональність інструментальних панелей, включаючи отрисовку елементів, обробку подій від миші і клавіатури, підтримку операцій drag-and-drop і т.п. Для розширення функціональності панелей інструментів можна скористатися класом ToolStripManager, щоб об’єднати елементи панелі в спеціальні горизонтальні чи вертикальні області (RaftingContainer). Для отримання більш повного контролю над стилями і отрисовкой панелей можна використовувати клас ToolStripRenderer.

Питання міграції
При міграції додатків, що використовують компонент ToolBar, на застосування компонента ToolStrip потрібно враховувати наступне:


Тепер звернемося до компонентів, побудованим на основі компонента ToolStrip.

Компонент MenuStrip


Компонент MenuStrip являє собою контейнер для створення структури меню, кожен елемент якого реалізується за допомогою компонента ToolStripMenuItem. Кожен такий елемент може або представляти конкретну команду, або містити дочірні елементи.

Компонент MenuStrip може містити компоненти ToolStripMenuItem, ToolStripComboBox, ToolStripSeparator і ToolStripTextBox.

Питання міграції
При міграції на використання компонента MenuStrip потрібно враховувати наступне:


Для створення контекстних меню застосовується компонент ContextMenuStrip, який ми розглянемо в наступному розділі.

Компонент ContextMenuStrip


Даний компонент використовується для реалізації контекстних меню, які відображаються, коли користувач клацає правою кнопкою миші по интерфейсному елементу або певної галузі форми. Для зв’язку інтерфейсних елементів або форми з контекстним меню використовується властивість ContextMenuStrip відповідного елементу або форми.

Контекстне меню може складатися з наступних елементів: ToolStripMenuItem, ToolStripComboBox, ToolStripSeparator і ToolStripTextBox.

Питання міграції
При міграції на застосування компонента ContextMenuStrip потрібно враховувати наступне:


Останній інтерфейсний елемент, який ми розглянемо в цьому розділі, – це компонент StatusStrip.

Компонент StatusStrip


Цей компонент використовується для створення статусних панелей і зазвичай складається з декількох елементів StatusStripPanel, що додаються за допомогою методу AddRange, кожен з яких може містити або текст, або графічне зображення, або і те й інше. Статусна панель також може містити компоненти ToolStripLabel і ToolStripProgressBar.

Питання міграції

При міграції на застосування компонента StatusStrip потрібно враховувати наступне:


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

Компоненти для відображення даних


Компонент DataGridView


Для відображення даних в табличному форматі служить компонент DataGridView, який покликаний замінити функціональність компонента DataGrid з попередніх версій Windows Forms. Цей компонент може використовуватися для подання даних будь-якого обсягу, доступних або тільки для читання, або для читання і редагування. Дані можуть як перебувати в зовнішньому джерелі (який задається властивостями DataSource і DataMember), так і додаватися програмним чином безпосередньо в компонент. При роботі з великими обсягами даних можна застосовувати властивість VirtualMode для відображення підмножини даних. Використання цієї властивості вимагає реалізації операцій кешування даних, які зв’язуються з компонентом через обробник події CellValueNeeded.

Рис. 2. Компонент DataGridView

Компонент DataGridView підтримує велику кількість налаштувань осередків, рядів, колонок та рамок навколо них – для цього використовується широкий набір властивостей, у тому числі DefaultCellStyle, ColumnHeadersDefaultCellStyle, CellBorderStyle і GridColor.

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


Компонент DataConnector


Новий компонент DataConnector виконує роль сполучної ланки між інтерфейсним елементом і джерелом даних. Він автоматично управляє такими функціями, як підтримка поточного стану, події в джерелах даних і зміни джерел даних. Крім забезпечення зв’язку з інтерфейсними елементами DataConnector може виконувати функції строго типізованого джерела даних.

Компонент DataConnector призначений для спільного використання з такими компонентами, як DataNavigator і DataGridView.

Компонент DataNavigator


Даний компонент являє собою стандартну панель для навігації по даним і маніпуляції ними. У більшості сценаріїв компонент DataNavigator використовується спільно з компонентом DataConnector (через властивість DataConnector) для переміщення по записах і виконання маніпуляцій над ними.

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

Компоненти для управління розташуванням елементів


У Windows Forms 2.0 з’явився ряд розширень, пов’язаних з управлінням розташуванням елементів на формі. До них відносяться деякі нові властивості компонентів (Margin, Padding, Autosize), а також три нових компонента – SplitContainer, FlowLayoutPanel і TableLayoutPanel, які ми розглянемо нижче.

Компонент SplitContainer


Даний компонент є переміщувану смугу, яка розділяє область контейнера на дві панелі, розмір яких може змінюватися. У кожній панелі може бути розміщений будь-який компонент Windows Forms, включаючи і інші компоненти SplitContainer.

Компонент підтримує вертикальне і горизонтальне поділ панелей і різні налаштування, що дозволяють управляти кроком переміщення розділової смуги, мінімальними розмірами панелей, способами їх заповнення, типом рамки навколо панелей і т.п.

Питання міграції
При міграції з компонента Splitter, підтримується в попередніх версіях Windows Forms, необхідно змінити тип компонента (зі Splitter на SplitContainer), змінити значення властивості Dock компонентів, розташованих усередині панелей, зв’язати ці компоненти з батьківським компонентом і, при необхідності, змінити розміри і місце розташування компонентів всередині панелей.

Компонент FlowLayoutPanel


Даний компонент являє собою панель, яка динамічно відображає свій вміст в горизонтальному (FlowDirection = LeftToRight) або вертикальному вигляді (FlowDirection = TopDown). В панелі компонента FlowLayoutPanel можуть розташовуватися будь-які компоненти Windows Forms, включаючи і компоненти FlowLayoutPanel.

Компонент TableLayoutPanel


Даний компонент являє собою панель, яка динамічно розподіляє свій вміст, розміщене в елементах таблиці. У такій таблиці може знаходитися будь-який компонент Windows Forms, включаючи і компоненти TableLayoutPanel. В залежності від значень властивостей RowCount, ColumnCount і GrowStyle в компонент можуть бути додані нові елементи, що призведе до динамічного зміни його розміру. Крім цього можна управляти вертикальним або горизонтальним розширенням компонента. Точні параметри рядів і колонок здійснюються за допомогою властивостей RowStyles і ColumnStyles.

Редактор з підтримкою шаблонів


Компонент MaskedTextBox являє собою розширену версію компонента TextBox і дозволяє застосовувати опису масок для визначення коректності введеної інформації.

У разі використання нестандартних масок передбачається використання синтаксису, схожого з синтаксисом регулярних виразів.

Компонент підтримує можливість видачі звукового сигналу в разі невірно введеної інформації.

Рис. 3. Завдання масок в Visual Studio 2005

Більш комплексна перевірка введених даних може припускати порівняння з допустимим значенням для конкретного типу даних. Цій меті служить властивість ValidatingType, в якому вказується відповідний тип даних. У разі успішного завершення перевірки виникає подія TypeValidationCompleted; об’єкт з введеним значенням стає доступним за допомогою властивості ReturnValue, яке можна знайти в колекції TypeValidationEventArgs.

Програвач


Компонент SoundPlayer дозволяє реалізувати синхронне або асинхронне відтворення звуку у форматі *. Wav в додатках. Файли можуть завантажуватися або з вбудованого ресурсу, або з файлу, або по протоколу HTTP, або з потоку. Розташування задається або в конструкторі, або властивостями SoundLocation або Stream. Файл може бути завантажений як до його відтворення (методи Load, LoadAsync), так і при виклику одного з методів, що відтворюють його вміст (методи Play, PlayLooping, PlaySync).

Завершення завантаження файлу призводить до виникнення події LoadCompleted, в обробнику якого можна перевірити статус завантаження файлу. При зміні місця розташування файлу виникає подія SoundLocationChanged, а при зміні потоку – подія StreamChanged.

Зазначимо, що для відтворення системних звуків, визначених типом SystemSounds, не потрібно створення екземпляра об’єкта SoundPlayer: кожен із системних звуків повертає примірник SoundPlayer – треба лише викликати його метод Play.

Web-браузер


Компонент WebBrowser дозволяє відображати в Windows-додатках вміст Web-сторінок. Цей компонент є “обгортку” навколо відповідного ActiveX-компонента Internet Explorer і представлений класом System.Windows.Forms.WebBrowser. Компонент WebBrowser може використовуватися для реалізації довідкової системи на основі HTML-документів або для підтримки функцій перегляду вмісту Інтернету. Крім цього компонент WebBrowser може застосовуватися для перетворення існуючих Web-додатків в клієнтські програми, які використовують DHTML-код для управління користувача інтерфейсом.

Разом з компонентом WebBrowser поставляється набір керованих класів для маніпуляції вмістом Web-сторінок – HTML DOM. Ці керовані класи не перекривають на 100% функціональність IE DOM, але дозволяють виконувати найбільш часто здійснюються операції, включаючи обробку подій безпосередньо з керованого коду. Крім цього керовані класи HTML DOM надають доступ до атрибутів HTML-документа, які недоступні напряму, – для цього використовуються методи типу GetAttribute (string attributeName).

Підтримка асинхронних операцій


Для виконання операцій в окремому потоці надається клас BackgroundWorker і відповідний компонент, який можна перетягнути на форму з панелі компонентів (вкладка Components). Метод DoWork () даного компонента повинен містити код, який буде виконуватися в окремому потоці. Після закінчення роботи методу DoWork () відбувається подія RunWorkerCompleted, в обробнику якого можна передбачити відповідні дії. Для відстеження прогресу виконання фонової операції використовується обробник події ProgressChanged.

Для дострокового завершення фонової операції використовується метод CancelAsync, який встановлює відповідне значення властивості CancellationPending. Фоновий код, який підтримує дострокове завершення, перевіряє значення цієї властивості і, як тільки воно стає рівним True, завершує своє виконання. Властивість WorkerSupportsCancellation компонента BackgroundWorker повинно бути встановлено рівним True для того, щоб була забезпечена підтримка дострокового завершення операцій.

Зазначимо, що ряд компонентів Windows Forms тепер підтримує асинхронні операції. До таких компонентів, зокрема, відноситься розглянутий вище компонент SoundPlayer і компонент PictureBox, у якого тепер є метод LoadAsync.

Оскільки фонова операція виконується в окремому потоці, в її коді не допускаються маніпуляції з елементами форми. Це обмеження пов’язане з тим, що обробка повідомлень відбувається саме в тому потоці, в якому спочатку створений елемент.

Для вирішення більш широкого кола завдань, пов’язаних з виконанням асинхронних операцій (наприклад, створення власних компонентів), можна використовувати клас AsyncOperationManager.

Покращення в підтримці виводу на пристрої друку


Підтримка виведення на пристрої друку в. NET Framework версій 1.0 і 1.1 була далека від досконалості. Істотні поліпшення в цьому напрямку плануються в. NET Framework 2.0. Новий клас – SimplePrintDocument дозволяє виконувати висновок на пристрої друку за допомогою виклику набору простих і інтуїтивно зрозумілих методів.

Після створення нового екземпляра SimplePrintDocument класу користувач встановлює значення властивостей: розмір робочої області документа, наявність рамок, наявність верхніх і нижніх колонтитулів, визначає необхідні настройки принтера і т.п., а потім використовує методи DrawXXX (для відтворення графіки) або WriteXXX (для виведення текстової інформації) для заповнення друкується документа. Для роздруку таблиць надаються методи WriteDataboundTable і WriteDataboundTable, а для роздруківки таблиць, пов’язаних з джерелами даних, використовується метод WriteDataboundTable.

На цьому ми завершуємо коротке знайомство з новинками в Windows Forms 2.0. У наступному номері ми розглянемо основні зміни в технології створення Web-додатків – ASP. NET 2.0.


Додаткова інформація



Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*