Вивчаємо Visual Studio. NET. Частина 2. Створення Windows-додатків, Інтеграція додатків і даних, Бази даних, статті

У попередньому номері ми почали знайомитися з Visual Studio. NET та обговорили основні можливості цього середовища розробника. В цій частині статті ми продовжимо вивчення Visual Studio. NET і розповімо про створення Windows-додатків за допомогою даного засобу розробки.

Створення Windows-програм починається з того, що ми створюємо новий проект типу Windows Application, вибираючи відповідний шаблон для одного зі встановлених мов програмування – Visual Basic. NET, С # і т.д.

Натискання кнопки OK призводить до завантаження обраного нами шаблону і до появи основних вікон середовища розробника. Цими вікнами є:

 

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

 

Для перемикання між режимом візуального проектування форми і режимом редагування коду використовуються клавіші F7 (режим коду) і Shift-F7 (режим дизайну). На наступному малюнку показана робота в режимі редагування коду (зверніть увагу на те, що замість Solution Explorer ми включили браузер класів (Class View), який може бути корисним для швидкої навігації по вихідному коду створюваного нами додатки).

 

Палітра компонентів (ToolBox), що викликається натисканням клавіш Ctrl-Alt-X, містить всі стандартні компоненти, які ми можемо використовувати в Windows-додатках. Вона розділена на декілька вкладок:

 

Використання інтерфейсних елементів

 

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

 

 

Категорія Інтерфейсні елементи
Редагування тексту TextBox, RichTextBox
Відображення тексту Label, LinkLabel, StatusBar
Вибір зі списку CheckedListBox, ComboBox, DomainUpDown, ListBox, ListView, NumericUpDown, TreeView
Відображення графіки PictureBox
Зберігання графіки ImageList
Введення значень CheckBox, CheckedListBox, RadioButton, TrackBar
Введення дати DateTimePicker, MonthCalendar
Діалогові панелі ColorDialog, FontDialog, OpenFileDialog, PrintDialog, PrintPreviewDialog, SaveFileDialog
Створення меню MainMenu, ContextMenu
Команди Button, LinkLabel, NotifyIcon, ToolBar
Об’єднання компонентів Panel, GroupBox, TabControl

 

При перетягуванні будь-якого компонента з палітри на форму його властивості та події стають доступними через вікно редагування властивостей – вікно Properties. Розглянемо наступний приклад. Припустимо, що ми хочемо створити програму, що дозволяє переглядати графічні файли. Для цього нам потрібні наступні компоненти:

 

 

 

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

 

Наступний крок – це зміна деяких властивостей компонентів. Почнемо з форми і встановимо значення її властивості Text рівним Graphics View. Далі змінимо значення властивості StartPosition на CenterScreen – в результаті наш додаток завжди буде відображатися в середині екрану. Якщо ми хочемо, щоб розмір нашого вікна не можна було змінити, ми повинні встановити значення FormBorderStyle рівним FixedSingle або Fixed3D. В іншому випадку при зміні розміру вікна порушиться розташування елементів усередині нього.

 

Усередині вікна знаходяться два інтерфейсних елемента – кнопка і елемент для відображення графіки. У кнопки ми повинні змінити властивість Text на Open. Для елемента PictureBox ми встановимо тривимірну рамку (BorderStyle = Fixed3D), а також змінимо властивість Anchor – з його допомогою ми вкажемо, як мають змінюватися розміри елемента в залежності від розмірів вікна.

 

Для компонента OpenFileDialog ми змінимо наступні властивості:

 

 

Filter Graphics / *.bmp
Title Select Graphics File
InitialDirectory c:

 

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

 

Написання коду

 

Слідуючи логіці нашої програми, кожне натискання кнопки Open повинно призводити до відкриття діалогової панелі OpenFile. Вибір одного файлу і натискання кнопки Open в цій діалогової панелі викликає відображення цього файлу в компоненті PictureBox.

 

Ми починаємо з того, що створюємо обробник події, що виникає при натисканні кнопки Open. Для цього ми або двічі клацаємо по кнопці в режимі дизайну, або в режимі редагування коду вибираємо компонент Button у списку компонентів, розташованому у верхній частині редактора, а потім вибираємо в списку подія Click. В результаті тих чи інших дій ми отримуємо код обробника події Click нашої кнопки. Ми додаємо в нього наступний код:

 

Dim Bmp As Bitmap

If OpenFileDialog1.ShowDialog() = DialogResult.OK Then

PictureBox1.SizeMode = PictureBoxSizeMode.StretchImage
Bmp = New Bitmap(OpenFileDialog1.FileName)
PictureBox1.Image = CType(Bmp, Image)

End If

 

У першому рядку ми створюємо змінну типу Bitmap, в яку будемо завантажувати вміст вибраного нами графічного файлу. Потім ми викликаємо метод ShowDialog об’єкта OpenFileDialog, щоб відобразити на екрані панель вибору файлів. Якщо файл вибраний і натиснута кнопка Open, ми виконуємо наступні дії:

 

Давайте змінимо наш додаток і замість кнопки будемо використовувати меню. Для цього видалимо компонент Button і перетягнемо з палітри компонентів компонент MainMenu. Створимо елемент File і два піделементи – Open і Exit. Для цього скористаємося редактором меню, що надаються Visual Studio. NET і викликуваним при клацанні мишею по компоненту MainMenu.

 

Після того як меню готово, нам необхідно написати код, який буде виконуватися при виборі тієї або іншої команди. Для цього ми двічі клацаємо мишею по відповідній команді і потрапляємо в редактор коду. Для команди File / Open переносимо код, створений нами для обробника події, пов’язаної з натисканням на кнопку. Для команди File / Exit ми напишемо наступний код:

 

Application.Exit()

 

Виконання цього коду приведе до завершення нашої програми і до закриття його вікна.

 

Створення MDI-додатків

 

Після того як ми освоїли створення меню, давайте змінимо функціональність нашого застосування таким чином, щоб кожен обраний графічний файл відкривався в новому дочірньому вікні, тобто перетворимо наш одновіконному додаток в Multiple Document Interface (MDI)-додаток.

 

Створення MDI-приложения ми починаємо з того, що змінюємо властивість IsMDIContainer нашої форми і присвоюємо йому значення True. Після цього ми використовуємо команду Project / Add Windows Form для додавання до нашого проекту ще однієї форми, яка буде служити в якості дочірньої форми. У діалоговій панелі Add New Item ми вибираємо елемент Windows Form і натискаємо кнопку Open.

 

Перенесемо компонент PictureBox з головної форми нашого застосування в дочірню форму. Для цього слід вибрати компонент PictureBox, натиснути клавішу Ctrl-X, потім перейти на дочірню форму і натиснути клавішу Ctrl-V. Наше MDI-додаток практично готове – нам залишилося лише змінити код, що виконується при виборі команди File / Open, тепер він буде виглядати наступним чином (внесені нами зміни показані виділеним шрифтом):

 

Private Sub MenuItem2_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MenuItem2.Click

Dim Bmp As Bitmap
Dim Child As New Form2()

Child.MdiParent = Me

If OpenFileDialog1.ShowDialog() = DialogResult.OK Then

Child.PictureBox1.SizeMode = PictureBoxSizeMode.StretchImage
Bmp = New Bitmap(OpenFileDialog1.FileName)
Child.PictureBox1.Image = CType(Bmp, Image)
Child.Show()

End If

End Sub

 

Спочатку ми створюємо змінну Child, яка має тип Form2 і буде використовуватися для створення дочірніх форм. Потім вказуємо батьківське вікно дочірньої форми – ключове слово Me використовується в Visual Basic для вказівки поточного класу. Оскільки компонент PictureBox тепер розташовується в дочірньому вікні, ми змінюємо спосіб звертання до нього. Після того як графіка завантажена, ми показуємо нашу дочірню форму на екрані.

 

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

 

Child.Text = OpenFileDialog1.FileName

 

Якщо ж ми хочемо відобразити тільки ім’я файлу, нам треба написати такий код:

 

Dim FI As FileInfo

FI = New FileInfo(OpenFileDialog1.FileName)
Child.Text = FI.Name

 

і додати посилання на простір імен System.IO на самому початку коду нашої програми:

 

Imports System.IO

 

Тепер давайте додамо код, який дозволить нам керувати дочірніми вікнами. Почнемо з того, що створимо ще один пункт меню – Childs і додамо до нього такі елементи: Tile Horizontal; Tile Vertical; Cascade; Arrange Icons.

 

Потім напишемо код для кожної з команд:

 


“Команда TileHorizontal

Private Sub MenuItem6_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MenuItem6.Click

Me.LayoutMdi(MdiLayout.TileHorizontal)

End Sub


“Команда TileVertical

Private Sub MenuItem7_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MenuItem7.Click

Me.LayoutMdi(MdiLayout.TileVertical)

End Sub


“Команда Cascade

Private Sub MenuItem8_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MenuItem8.Click

Me.LayoutMdi(MdiLayout.Cascade)

End Sub


“Команда ArrangeIcons

Private Sub MenuItem9_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MenuItem9.Click

Me.LayoutMdi(MdiLayout.ArrangeIcons)

End Sub

 

Включимо ще одну можливість – меню для перемикання між вікнами. Додамо до головного меню елемент Window і змінимо значення його властивості MdiList на True.

 

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

 

Додамо компонент ContextMenu до дочірньої формі і створимо в ньому такі елементи: Normal; Center; Stretch; Autosize, які повторюють всі можливі значення властивості SizeMode компонента PictureBox. Встановимо властивість ContextMenu компонента PictureBox в ContextMenu1. Потім напишемо код, який буде виконуватися при виклику кожної з команд контекстного меню:

 

Private Sub MenuItem1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MenuItem1.Click

PictureBox1.SizeMode = PictureBoxSizeMode.Normal

End Sub

Private Sub MenuItem2_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MenuItem2.Click

PictureBox1.SizeMode = PictureBoxSizeMode.CenterImage

End Sub

Private Sub MenuItem3_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MenuItem3.Click

PictureBox1.SizeMode = PictureBoxSizeMode.StretchImage

End Sub

Private Sub MenuItem4_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MenuItem4.Click

PictureBox1.SizeMode = PictureBoxSizeMode.AutoSize

End Sub
Після цього нам треба видалити рядок:
Child.PictureBox1.SizeMode = PictureBoxSizeMode.StretchImage

 

з обробника події вибору команди File / Open в головному меню нашого застосування.

 

Файл проекту та генерація коду

 

Microsoft Visual Studio. NET автоматично генерує необхідний код для ініціалізації форми, що додаються нами компонентів і т.п. Для кожної форми створюється окремий файл, який має те ж ім’я, що і клас, що описує форму. Вся інформація про те, з чого складається наше додаток, знаходиться у файлі з розширенням. Sln (Microsoft Visual Studio Solution File). У цьому файлі, зокрема, написано, як називається наш додаток і який файл проекту ставиться до нього. Файл проекту, що має розширення, що відображає обраний нами мова програмування (WinApp.vbproj у нашому прикладі), – це XML-файл, що містить всі необхідні характеристики проекту. Зокрема, тут є інформація про платформу, для якої створюється результуючий файл (OutputType = “WinExe” в нашому прикладі), про початковий об’єкті (StartupObject = “WinApp.Form1” в нашому прикладі), ім’я кореневого простору імен (RootNamespace = “WinApp” в нашому прикладі). Окремий інтерес представляє список посилань на простору імен, доступних за умовчанням (Інші, як ми бачили вище, треба вказувати за допомогою ключового слова Imports), а також список імпортованих просторів імен, який для Windows-програми виглядає так:

 

<Imports>
<Import Namespace = “Microsoft.VisualBasic” />
<Import Namespace = “System” />
<Import Namespace = “System.Collections” />
<Import Namespace = “System.Data” />
<Import Namespace = “System.Drawing” />
<Import Namespace = “System.Diagnostics” />
<Import Namespace = “System.Windows.Forms” />
</Imports
>

 

Список файлів, з яких складається наш додаток, розташовується в секції Files. Вид цієї секції для нашого прикладу показаний нижче (зверніть увагу на різні значення атрибутів SubType, а також на автоматичне створення необхідних файлів):

 

<Files>
<Include>
<File
RelPath = “AssemblyInfo.vb”
SubType = “Code”
BuildAction = “Compile”
/>
<File
RelPath = “Form1.vb”
SubType = “Form”
BuildAction = “Compile”
/>
<File
RelPath = “Form1.resx”
DependentUpon = “Form1.vb”
BuildAction = “EmbeddedResource”
/>
<File
RelPath = “Form2.vb”
SubType = “Form”
BuildAction = “Compile”
/>
<File
RelPath = “Form2.resx”
DependentUpon = “Form2.vb”
BuildAction = “EmbeddedResource”
/>
</Include>
</Files>

 

Файл AssemblyInfo містить всю необхідну інформацію про збірку. Якщо ми не задали цю інформацію, то використовуються значення за замовчуванням.

 

Всі файли, які застосовуються як шаблонів для Windows-програми, розташовуються в каталозі (показаний приклад для Visual Basic):

 

C:Program FilesMicrosoft Visual Studio .NETVb7
VBWizardsWindowsApplicationTemplates1033

 

Тут ми знайдемо файли, що представляють собою «шаблон» Windows-програми: AssemblyInfo.vb; Form.vb; WindowsApplication.vbproj.

 

Файл, в якому розташовується код, відповідальний за функціонування форми, складається з двох частин. Перша з них, з міткою “Windows Form Designer generated code”, містить код, який копіюється з шаблону програми, – цей код не повинен редагуватися програмістами! Щоб обмежити доступ до нього, в редакторі коду в Visual Studio. NET він позначається спеціальним чином, як це показано на наступному малюнку.

 

Код між цим блоком і завершенням класу (End Class) або створюється нами, або генерується Visual Studio. NET – наприклад, сюди поміщається код обробників подій, а також код, який реалізує логіку нашого програми.

 

Заглянувши в блок “Windows Form Designer generated code”, ми виявимо там ініціалізацій код, який може пояснити нам базові принципи організації Windows-додатків, створюваних засобами Microsoft . NET. Цю тему ми обговоримо в наступному номері.

 

Висновок

 

У цій частині статті ми навчилися за допомогою Microsoft Visual Studio. NET створювати Windows-програми. Ми розглянули основні елементи середовища розробки, які використовуються в цьому процесі, коротко ознайомилися з типами інтерфейсних елементів, а також дізналися, як створити просте одновіконному і MDI-додаток. Ми також розглянули файли, з яких складається проект, та ознайомилися з їх вмістом.

 

Ми продовжимо знайомство з Microsoft Visual Studio. NET в наступному номері, де поговоримо про базові принципи організації Windows-додатків і наведемо ряд прикладів використання компонентів, що реалізують інтерфейсні елементи, а також компонентів, що виконують різні серверні функції.

Частина 3

 

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


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

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

Ваш отзыв

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

*

*