Неактивна зіркаНеактивна зіркаНеактивна зіркаНеактивна зіркаНеактивна зірка
 

ЕЛЕМЕНТИ КЕРУВАННЯ: ПЕРЕМИКАЧІ І ПРАПОРЦІ. ЕЛЕМЕНТИ КЕРУВАННЯ: СПИСКИ. СТВОРЕННЯ МЕНЮ І ПАНЕЛІ ІНСТРУМЕНТІВ. ВИКОРИСТАННЯ СТАНДАРТНИХ КОМПОНЕНТІВ

МЕТОДИЧНІ ВКАЗІВКИ

до лабораторної роботи № 5

з дисципліни «Крос-платформенне програмування та хмарні сервіси»

для магістрів галузі знань 12 «Інформаційні технології»

спеціальності 124 «Системний аналіз»

спеціалізації «Системи і методи прийняття рішень»

 

Затверджено

на засіданні кафедри інформаційних систем та мереж

Протокол №01 від 25.08.2016 р.

Львів-2016


 

Елементи керування: перемикачі і прапорці. Елементи керування: Списки. Створення меню і панелі інструментів. Використання стандартних компонентів: Методичні вказівки до лабораторної роботи № 5 / Укл.: В.А. Висоцька, Л.В. Чирун. – Львів: Видавництво Національного університету ”Львівська політехніка”, 2016. – 36 с.

Укладачі                     Висоцька В.А., к.т.н., доцент

                                      Чирун Л.В., к.т.н, доцент

 

 

Відповідальний за випуск Литвин В.В., д.т.н., професор.

Рецензенти                 Берко А.Ю., д.т.н., професор.

                                      Верес О.М., к.т.н, доцент.


Метою роботи є ознайомлення та освоєння практичних навичків з таких пунктів

1. Використання на формі перемикачів RadioButton

2. Використання CheckBox

3. Компонент календар і його інтерфейс

4. Використання ListBox

5. Використання ComboBox

6. Використання CheckedListBox

7. Створення головного меню для застосунку

8. Створення панелі інструментів

9. Меню Про програму (About). Виклик форми з меню

10. Обробка подій кнопок панелі інструментів і меню. Делегати.

11. Команди меню як прапорці

12. Відкриття файлу - OpenFileDialog

13. Збереження файлу -  SaveFileDialog

14. Вибір шрифту  - FontDialog

15. Вибір кольору - ColorDialog

16. Друкування файлу – PrintDialog

17. Обробка подій кнопок панелі інструментів

18. Завершення роботи програми та інші події

19. Виведення повідомлень - MessageBox

Теоретичні відомості

  1. Клас BUTTONBASE і його нащадки: Кнопки, прапорці та перемикачі 

1.1. Клас ButtonBase і його основні властивості

Клас ButtonBase в ієрархії класів .NET забезпечує загальні можливості для групи похідних від нього класів: Button, CheckBox і RadioButton. Деякі властивості класу ButtonBase описані в табл.1.1. Крім спільних властивостей кожний з класів має власні властивості.

Таблиця 1.1. Властивості класу ButtonBase

Властивість Призначення
FlatStyle Дозволяє налаштувати "рельєфність" кнопки. Використовуються значення з переліку можливих значень властивості FlatStyle
Image Дозволяє задати зображення, яке буде виводитися на кнопці (при цьому можна вказати точне місцезнаходження зображення). Фоновий рисунок краще налаштовувати за допомогою властивості BackgroundImage, яка визначена в базовому класі Control
ImageAlign Дозволяє визначити вирівнювання зображення, розміщеного на кнопці. Використовуються значення з переліку можливих значень властивості ContentAlignment
Imagelndex, ImageList Ці властивості використовуються для роботи з набором зображень (об'єктом ImageList), що виводяться на кнопці
IsDefault Визначає, чи буде ця кнопка кнопкою за замовчанням (тобто спрацьовувати при натисненні на Enter)
TextAlign Дозволяє отримати або встановити вирівнювання тексту на кнопці.

1.2. Елемент Кнопка. Клас Button

Кнопка (button) - це найпростіший і найбільш застосовний з усіх елементів керування. Дозволяє організувати керування формою. Основні властивості класу наслідуються відButtonBase і Control. Найбільш використовувана подія кнопки - Click, яка виникає при натисненні на кнопку лівою кнопкою миші. Наприклад, для того, щоб закрити форму при натисненні на кнопку Завершити, в  обробнику кнопки викликаємо метод Close()?

  private void btmClose_Click(object sender, EventArgs e)

        {

          Close();

        }

Якщо рішення містить декілька форм, то для завершення роботи в обробнику кнопки викликаємо метод Application.Exit().

  private void btmClose_Click(object sender, EventArgs e)

        {

            Application.Exit();

        }

1.3. Елемент Прапорець (клас CheckBox).

Для прапорця (клас CheckBox) передбачено три можливі стани. Як і тип Button, клас CheckBox успадковує більшу частину своїх властивостей від базових класів Control і ButtonBase. Проте в цьому класі існують і свої власні члени, що забезпечують додаткові унікальні можливості (табл. 1.2).

Таблиця 1.2. Основні властивості класу CheckBox

Властивість Призначення
Appearance Налаштовує вигляд прапорця. Для цієї властивості використовуються значення з переліку можливих значень Appearance
AutoCheck Дозволяє отримати або встановити значення, яке визначає, чи будуть значення Checked і CheckState, а також зовнішній вигляд прапорця автоматично змінюватися при клацанні на ньому
CheckAlign Дозволяє встановити горизонтальне і вертикальне вирівнювання прапорця (квадратика) в елементі CheckBox. Використовуються значення з переліку ContentAlignment
Checked Повертає значення типу bool, що представляє поточний стан прапорця (вибраний або не вибраний) Якщо для властивості ThreeState встановлено значення true, то властивість Checked буде повертати true як для явно вибраного прапорця, так і для того прапорця, для якого встановлено значення не “визначено” (indeterminate)
CheckState Дозволяє отримати або встановити значення прапорця (встановлений - не встановлений - не визначено), використовуючи не true і false, як в Checked, а три значення з переліку CheckState. Звичайно використовується, якщо властивість ThreeState для прапорця має значення true (тобто він допускає три значення).
ThreeState Визначає, чи будуть для прапорця використовуватися три значення (з переліку CheckState) або тільки два
Enabled Повертає або задає значення, що визначає, чи активний елемент. Можливі значення: активний – true, інакше -false

Можливі стани прапорця (Indeterminate можна використовувати тільки тоді, коли для властивості ThreeState встановлено значення true) наведено в таблиці 1.3.

Таблиця 1.3. Можливі стани прапорця

Checked Прапорець встановлений
Indeterminate Значення не визначено (звичайно прапорець виглядає як "сірий", затіняє)
Unchecked Прапорець знятий

1.4. Елемент Перемикач (Клас RadioButton)

Клас RadioButton(перемикач) можна сприймати, як видозмінений прапорець, при цьому схожість між цими типами підкреслюється майже повним збігом наборів членів. Між типами RadioButton і CheckBox існують лише дві важливі відмінності: в RadioButton передбачено подію CheckedChanged (яка виникає при зміні значення Checked), а крім того, RadioButtonне підтримує властивість ThreeState і не може приймати стан Indeterminate (не визначено).

Таблиця 1.4. Основні властивості класу RadioButton

Властивість Призначення
Text Дозволяє отримати або встановити текст, який розміщений на перемикачі
AutoCheck Дозволяє отримати або встановити значення, яке визначає, чи будуть значення Checked і CheckState, а також зовнішній вигляд перемикача автоматично змінюватися при клацанні на ньому
TextAlign Дозволяє встановити горизонтальне і вертикальне вирівнювання тексту на перемикачі
Checked Повертає значення типу bool, що представляє поточний стан перемикаяа (вибраний або не вибраний). Якщо перемикач включений, значення Checked = true, інакше -  false.
CheckState Дозволяє отримати або встановити значення прапорця (встановлений - не встановлений - не визначено), використовуючи не true і false, як в Checked, а три значення з переліку CheckState. Звичайно використовується, якщо властивість ThreeState для прапорця має значення true (тобто він допускає три значення).
Enabled Повертає або задає значення, що визначає, чи активний елемент. Можливі значення: активний – true, інакше -false.

Приклад 1.1.

privatevoid ClickMyRadioButton()

{

   if (radioButton2.Checked)

   {

      radioButton1.PerformClick();

   }

}

При виборі перемикача генерується подія CheckedChanged:

private void radioButton1_CheckedChanged(object sender, EventArgs e)

        {

      

         }

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

І прапорець (CheckBox), і перемикач (RadioButton) підтримують властивість Checked, за допомогою якої зручно одержувати інформацію про стан відповідно прапорця і перемикача. Проте якщо є необхідність задіювати додатковий третій стан прапорця (не визначено - Indeterminate), то доведеться замість Checked використовувати властивість CheckState і значення з однойменного переліку CheckState.

Властивість Checkedчастіше за все використовується в коді.

1.5. Активація і деактивація елементів

Використання властивості Enabled дозволяє зробити елемент активним чи неактивним. Використовується частіше для динамічної зміни стану в коді.

1.6. Приховування елементів

Властивість елемента Visible дозволяє приховати чи зробити видимим елемент на формі. Значення Visible=true робить елемент видимим, Visible=false приховує елемент.

1.7. Динамічне створення елементів в коді

Створити елемент і налаштувати його властивості можна як в режимі дизайнера (статично), так і в самому коді форми (динамічно).

Приклад 1.2. Створення групи з елементами RadioButton

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace Lab3 {

    public partial class Form1 : Form  {

        private GroupBox groupBox1;

        private RadioButton radioButton2;

        private RadioButton radioButton1;

        public Form1()  {

            InitializeComponent();

        }

        public void InitializeRadioButtons()  {

            this.groupBox1 = new System.Windows.Forms.GroupBox();

            this.radioButton2 = new System.Windows.Forms.RadioButton();

            this.radioButton1 = new System.Windows.Forms.RadioButton();

            this.groupBox1.Controls.Add(this.radioButton2);

            this.groupBox1.Controls.Add(this.radioButton1);

            this.groupBox1.Location = new System.Drawing.Point(80, 75);

            this.groupBox1.Size = new System.Drawing.Size(200, 100);

            this.groupBox1.Text = "Radio Buttons";

            this.radioButton2.Location = new System.Drawing.Point(31, 53);

            this.radioButton2.Size = new System.Drawing.Size(67, 17);

            this.radioButton2.Text = "Choice 2";

            this.radioButton1.Location = new System.Drawing.Point(31, 20);

            this.radioButton1.Name = "radioButton1";

            this.radioButton1.Size = new System.Drawing.Size(67, 17);

            this.radioButton1.Text = "Choice 1";

            this.ClientSize = new System.Drawing.Size(292, 266);

            this.Controls.Add(this.groupBox1);

        }

        private void Form1_Load(object sender, EventArgs e){

            InitializeRadioButtons();

        }

    }}

Приклад 1.3. Створення елементу CheckBox

      public void InstantiateMyCheckBox() {

            // Create and initialize a CheckBox.  

            CheckBox checkBox1 = new CheckBox();

            // Make the check box control appear as a toggle button.

            checkBox1.Appearance = Appearance.Button;

            // Turn off the update of the display on the click of the control.

            checkBox1.AutoCheck = false;

            // Add the check box control to the form.

            Controls.Add(checkBox1);

            checkBox1.Text = "Прапорець";

  }

Висновки. Для організації вибору та налаштування параметрів на формі використовуються перемикачі і прапорці. Основна відміна між ними в тому, що за допомогою прапорців можна вибрати декілька елементів. Крім того, прапорець може приймати три стани, а перемикач тільки два. Як і інші елементи,  їх можна створити в режимі дизайнера (статично) чи динамічно в коді. Основна властивість цих елементів Checked – визначає чи вибраний елемент.

  1. СПИСКИ

2.1. Види списків. Загальні властивості і методи роботи зі списками

Списки є похідними класами від абстрактного класу FormatControl. До членів сімейства списків відносяться ListBox(список), ComboBox (випадаючий список), CheckedListBox (список з прапорцями) iListView (відображає елементи в одному з 5 режимів). Клас CheckedListBoxуспадковує більшість своїх можливостей від класу ListBox. Tе саме справедливо і для класу ComboBox.

2.2. Клас ListBox

Клас ListBox може містити колекцію об'єктів будь-якого типу (наприклад, рядків, зображень). В таблиці 2.1. наведено перелік основних властивостей класу ListBox, більшість з яких є і в інших типах списків. У списку ListBox видимі декілька елементів, на відміну від випадаючого списку ComboBox, в якому видимий лише один вибраний елемент, якщо тільки властивість IsDropDownOpen не встановлена в true.

Таблиця 2.1. Основні властивості ListBox

Властивість Призначення
Item Елемент списку
Items Елементи списку – колекція рядків
Items.Count Кількість елементів у списку
ScrollAlwaysVisible Визначає, чи буде смуга прокрутки виводитися завжди
Selectedlndex Індекс виділеного елемента в списку (якщо такий є). Якщо жоден елемент не виділений, то повертається значення -1
SelectedIndices Набір індексів виділених елементів в списку. Якщо не виділений жоден елемент, то повертається порожній набір
SelectedItem Значення виділеного елемента. Якщо жоден з елементів не виділений, то повертається null
SelectedItems Повертає колекцію значень виділених елементів (для списків, в яких допускається вибір декількох значень)
SelectionMode Визначає число елементів, які можна вибрати в списку одночасно. Для цієї властивості використовуються значення з переліку SelectionMode
Sorted Визначає, чи будуть елементи в списку впорядковані (за абеткою) чи ні
TopIndex Повертає індекс першого видимого елемента в списку

Властивість SelectionMode визначає, чи можна виділяти в списку ListBox декілька елементів одночасно. У таблиці 2.2. описана поведінка цих значень.

Таблиця 2.1. Можливі значення властивості SelectionMode

Значення Опис
One Можна вибрати одночасно лише один елемент (встановлене за замовчуванням).
MultiSimple Можна вибрати декілька елементів, не утримуючи клавішу модифікатора.
MultiExtended Можна вибрати декілька послідовних елементів, утримуючи клавішу SHIFT, або непослідовних елементів, утримуючи клавішу CTRL і клацаючи елементи.

Таблиця 2.2 - Основні методи роботи з ListBox

Метод Призначення
Items.Add Додає елемент до списку елементів
Items.Clear() Видаляє елементи із списку

Заповнення списку

Є різні способи заповнення списку даними (елементами).

1. Заповнення списку під час проектування форми (статичне).

Для цього потрібно виділити список на формі і у вікні властивостей заповнити значеннями властивість Items у вікні редактора рядків списку. Введені значення зразу відображаються у списку.

Такий спосіб можна використовувати тільки для відображення і вибору елементів списку, але не для редагування.

Приклад 2.1.мВ цьому прикладі список ListBox1 заповнюється назвами днів тижня.

При натисненні кнопки Вибрати (button1) в поле label2 виводиться текст:

Сьогодні у нас <день>

Значення вибраного елемента визначається властивістю SelectedItem.

Якщо вибрана неділя, в поле label2 виводиться текст:

Ура! Сьогодні у нас <день>

Номер вибраного елемента визначається властивістю Selectedlndex. Нумерація елементів починається з 0. 

При натисненні кнопки Очистити елементи видаляються без можливості відновлення.

namespace Lab4_ListBox{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

        private void button1_Click(object sender, EventArgs e)

        {

            if (listBox1.SelectedItem != null)

            {

                if (listBox1.SelectedIndex == 6)

                    label2.Text = "Ура! Сьогодні у нас  " + listBox1.SelectedItem;

                else

                    label2.Text = "Сьогодні у нас  " + listBox1.SelectedItem;

            }

            else

                MessageBox.Show("Елемент не вибраний із списку","Помилка");

        }

        private void button2_Click(object sender, EventArgs e)

        {

            listBox1.Items.Clear();

        }

    }

}

Рис. 2.1. Результат роботи форми.

2. Заповнення списку під час завантаження форми

Цей спосіб подібний до попереднього, але заповнення списку виконується при завантаженні форми (подія Form_Load).

Приклад 2.2. В цьому прикладі при завантаженні форми список заповнюється трьома елементами, назвами кольорів. При натисненні кнопки Додати (button1) в список додається решта кольорів. При натисненні кнопки Очистити button2 всі елементи видаляються. При подальшому натисканні кнопки Додати в список додаються тільки елементи, додавання яких реалізовано в обробнику кнопки.

namespace ListBox_2

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

        private void Form1_Load(object sender, EventArgs e)

        {

            listBox1.Items.Add("Червоний");

            listBox1.Items.Add("Помаранчовий");

            listBox1.Items.Add("Жовтий");

        }

       private void button1_Click(object sender, EventArgs e)

        {

            listBox1.Items.Add("Зелений");

            listBox1.Items.Add("Голубий");

            listBox1.Items.Add("Синій");

            listBox1.Items.Add("Фіолетовий");

        }

       private void button2_Click(object sender, EventArgs e)

       {

           listBox1.Items.Clear();

       }

    }

}

3. Заповнення списку із джерела даних

Елементи управління ListBox часто використовуються з прив'язкою даних. Джерелом даних може бути масив, поле бази даних, колекції даних, файл, тощо. При цьому вже не можна додавати елементи у список при натисненні на кнопку, через те, що джерело даних не можна змінювати.

Приклад 2.3.

В цьому прикладі джерелом даних є масив шифрів груп. Прив'язка до масиву виконується в методі Form1_Load.

namespace ListBox_2

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

        public string[] listData = { "K-01", "K-91", "K-81", "K-71", "MK-01", "MK-91" };

        private void Form1_Load(object sender, EventArgs e)

        {

            listBox1.DataSource= listData;

        }

    }

}

4. Динамічне створення списків

Як і будь-які елементи, списки можна створювати динамічно в коді. Це можна зробити в будь-якому методі форми.

Приклад 2.4. В цьому прикладі в режимі дизайнера створюється форма, на якій розміщується одна кнопка. При завантаженні форми в події Form1_Load створюється два списки, перший з яких містить назви міст. Для заповнення списку використовується метод Add(). При натисненні кнопки Вибрати в другий список вноситься вибране місто.

namespace ListBox_4_4

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

        private void Form1_Load(object sender, EventArgs e)

        {

            Text = "Приклад динамічного списку";

            list = new ListBox();  //створення об'єкту list

            list.Location = new Point(15, 15);

            list.Size = new Size(100, 100);

            this.Controls.Add(list);

            list.Items.Add("Київ");

            list.Items.Add("Суми");

            list.Items.Add("Львів");

            //створюємо другий список

            list1 = new ListBox();  //створення об'єкту list

            list1.Location = new Point(200, 15);

            list1.Size = new Size(100, 50);

            this.Controls.Add(list1);

        }

//створення змінних типу ListBox

        private ListBox list;

        private ListBox list1;

        private void button1_Click(object sender, EventArgs e)

        {

            if (list.SelectedItem != null)

                //якщо місто вибране - вноcимj у другий список його назву

                list1.Items.Add(list.SelectedItem);

            else

                list1.Items.Add("Нічого не вибрано!");

        }

    }

}

6. Заповнення списку файлами з каталогів

В .Net є класи для роботи з каталогами файлової системи. Наступний приклад демонструє заповнення списку файлами з каталогу.

Приклад 2.5. Як і в попередньому прикладі, створимо форму. В конструкторі форми створимо список, в який виведемо імена файлів, розміщених у вказаному каталозі. Для роботи з файлами потрібно підключити простір імен System.IO.

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.IO;

namespace ListBox_4._5

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

            Text = "Заповнення списку каталогами";

            list = new ListBox();

            list.Location = new Point(15, 15);

            list.Size = new Size(200, 200);

            this.Controls.Add(list);

            DirectoryInfo fds = new DirectoryInfo("D:\\Distribut");

            FileInfo[] files = fds.GetFiles();

            foreach (FileInfo file in files)

            {

                list.Items.Add(file);

            }

        }

            private ListBox list;

    }

 }

Вибір декількох елементів списку. Наступний приклад демонструє використання властивості SelectionMode значенням для вибору кількох елементів списку.

Приклад 2.6. Створимо форму і в режимі проектування розмістимо два списки. Перший список заповнимо при завантаженні форми днями тижня з масиву. В другий список будемо додавати вибрані елементи. При натисненні на кнопку > вибрані елементи додамо до другого списку.

Обов'язково потрібно очищати другий список, щоб елементи не дублювалися.

namespace ListBox_4._6

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

        public string[] Day = { "Понеділк", "Вівторок", "Середа", "Четвер", "П'ятниця", "Субота", "Неділя" };

        private void Form1_Load(object sender, EventArgs e)

        {

          //прив'язка списку до масиву

            listBox1.DataSource = Day; 

          //встановлення режиму вибору кількох елементів

            listBox1.SelectionMode = SelectionMode.MultiSimple;

        }

        private void button1_Click(object sender, EventArgs e)

        {

            listBox2.Items.Clear();

            if (listBox1.SelectedItems != null)

            {

                foreach (string item in listBox1.SelectedItems)

                    listBox2.Items.Add(item);

            }

        }

    }

}

2.3. Клас ComboBox

Клас ComboBox реалізує випадаючий список, в якому користувач може не тільки вибрати значення із списку, але і ввести своє власне. Клас ComboBox успадковує більшість своїх можливостей від класу ListBox, проте має і власні важливі властивості, наведені в таблиці 2.3. Як і в ListBox, ці властивості можна задати у вікні властивостей при проектуванні форми або динамічно в коді.

Таблиця 2.3 – Основні властивості ComboBox

Властивості Призначення
DroppedDown "Розкривається вниз": визначає, чи буде список випадаючим (встановлене за замовчанням)
MaxDropDownltems Визначає максимальну кількість елементів, яка буде показана в нижній частині спадаючого списку. Допустимі значення - від 1 до 100
MaxLength Визначає максимальну довжину тексту, який користувач може ввести в ComboBox
Selectedlndex Визначає індекс виділеного елемента ComboBox. Якщо жоден елемент не виділений, повертається значення -1
Selectedltem Повертає посилання на об'єкт виділеного елемента ComboBox
SelectedText Повертає виділений текст в полі редагування ComboBox
SelectionLength Визначає довжину (в символах) виділеного тексту в полі редагування ComboBox
Style Дозволяє отримати або встановити стиль ComboBox. Для цієї властивості використовуються значення з переліку ComboBoxStyle
Text Дозволяє отримати доступ до тексту в полі редагування. При роботі з ComboBox ця властивість використовується частіше всіх інших

Розглянемо приклад використання ComboBox з можливістю додавання елементів у список.

Приклад 2.7.

В цьому прикладі створюється форма, на якій розміщується випадаючий список міст, відсортований за абеткою. Для сортування в коді встановимо властивість comboBox1.Sorted = true. На формі розмістимо два текстових поля і три програмні кнопки. В перше поле буде виводитися назва улюбленого міста, вибрана у списку при натисненні кнопки Вибрати. Для додавання елементу у список потрібно ввести назву міста в текстове поле списку і натиснути кнопку Додати. При цьому не перевіряється, чи є таке місто у списку і можливе дублювання. Для пошуку  елементу у списку потрібно ввести потрібну назву міста у друге текстове поле і натиснути кнопку Знайти.

(Для ознайомлення з повним текстом статті необхідно залогінитись)