C#. Windows Forms. Компонент Button (кнопка). Взаємодія компонент Label та Button. Подія MouseMove

Компонент Button (кнопка). Взаємодія компонент Label та Button. Подія MouseMove

Перед вивченням даної теми рекомендується ознайомитись з попередньою темою:


Зміст


Пошук на інших ресурсах:

1. Загальні відомості про компонент Button

Компонент Button представляє собою кнопку на формі (рисунок 1).

C#. Windows Forms. Компонент Button. Розміщення на панелі Toolbox

Рисунок 1. Компонент Button. Розміщення на панелі Toolbox

Компонент Button є класом, який успадкований від абстрактного класу ButtonCase та реалізує інтерфейс IButtonControl. В свою чергу, клас ButtonCase є успадкований від класу Control.

У множині класів .NET Framework існує 3 типи кнопок, які успадковані від ButtonCase: Button, CheckBox, RadioButton.

Клас (компонент) Button має набір властивостей, які доступні як програмно, так і в режимі проектування (рисунок 2).

C#. Windows Forms. Властивості компонента Button

Рисунок 2. Властивості компонента Button

Нижче подано базові властивості компонента Button.

 

2. Властивості компонента Button

Основні властивості елементу управління Button наведені нижче. Тут наведені базові властивості які відрізняються від властивостей компонента Label. Більш детально про компонент Label (мітка) можна прочитати тут.

Властивіть Опис
Name Це є назва екземпляру об’єкту типу Button.
AutoSize Якщо AutoSize=True, то елемент управління змінює свій розмір автоматично в залежності від контенту (тексту, який набраний у властивості Text).
AutoSizeMode Визначає режим, за яким елемент управління Button змінює свій розмір. Ця властивість діє тільки якщо AutoSize=True.
DialogResult Результат повернення з модальної форми, яка викликалась методом ShowDialog().

Наприклад. Якщо у проекті створено нову форму типу Form2, яка містить кнопку OK, то виклик форми та перевірка результату повернення з форми може бути приблизно таким:

// Оголосити екземпляр типу форма
Form2 f2 = new Form2();

// Якщо результат поверення з форми OK, то виконати якісь дії
if (f2.ShowDialog() == DialogResult.OK)
{
  // дії, які потрібно виконати якщо натиснуто OK
  // ...
}
FlatAppearance Для кнопок, у яких значення FlatStyle=FlatStyle.Flat, визначає зовнішній вигляд границі та кольору, які використовуються для перевірки та стану мишки.
FlatStyle Визначає зовнішній вигляд елементу управління, коли користувач рухає мишкою поверх елементу управління і клікає на ньому.
Padding Визначає внутрішні відступи від країв елементу управління, що визначають область цього елементу
Size Розмір елементу управління в пікселях
TabIndex Позиція табуляції. Ця позиція має зміст, коли TabStop=True
TabStop Якщо значення TabStop=True, то елемент управління може приймати фокус введення з допомогою клавіші Tab.
Text Текст, асоційований з елементом управління
TextAlign Вирівнювання тексту, що буде відображатись в елементі управління
TextImageRelation Визначає, позицію зображення відносно тексту кнопки. Ця властивість має сенс, якщо завантежене хоча б одне зображення для елементу управління кнопка

 

3. Події елементу управління Button

Наступна таблиця відображає основні події елементу управління типу Button.

Подія Опис
Click Клік на кнопці
MouseClick Клік на кнопці з отриманням більш детальної інформації з допомогою класу MouseEventArgs
Enter Виникає, коли кнопка отримує фокус введення
Leave Виникає, коли елементу управління (кнопка) втрачає активність (фокус) на формі
KeyDown Виникає, коли натиснута клавіша (в тому числі і клавіші Alt та Ctrl). Дозволяє отримати код натиснутої клавіші, який описується в зчисленні Keys
KeyPress Виникає, коли елемент управління має фокус і натиснута та відпущена клавіша. Дозволяє отримати код символа типу char
KeyUp Виникає, коли відпущена клавіша. Так само як і для події KeyDown дозволяє отримати код натиснутої клавіші, описаний в зчисленні Keys
PreviewKeyDown Виникає перед подією KeyDown в момент коли натиснута клавіша і фокус введення є над кнопкою
MouseDown Виникає, коли покажчик миші є над компонентом і кнопка миші натиснута
MouseEnter Виникає, коли мишка входить у видиму частину елементу управління
MouseHover Виникає, коли мишка залишається всередині елементу управління деякий час
MouseLeave Виникає, коли мишка залишає видиму частину елементу управління
MouseMove Виникає, коли курсор миші рухається над областю кнопки
MouseUp Виникає, коли покажчик миші є над компонентом і кнопка миші відпущена

 

4. Приклад використання компонентів Label та Button. Програмування події MouseMove
4.1. Умова задачі

Розробити проект, який містить 2 кнопки (Button) та 2 мітки (Label). Дослідити роботу компонент виконавши наступні пункти.

4.2. Виконання
4.2.1. Створення проекту

Засобами Microsoft Visual Studio створити проект. Приклад створення проекту типу “C# – Windows Forms” можна підглянути тут.

Назвати проект “Demo Program”. Для цього використати властивість Text основної форми Form1.

 

4.2.2. Розміщення елементів управління Label, Button. Налаштування елементів управління

Розмістити на формі два елементи управління типу Label та два елементи управління типу Button. У результаті, система створить чотири екземпляри з іменами label1, label2, button1, button2 (рисунок 3).

C#. Windows Form. Урок. Клас Form. Початковий стан форми та елементів управління на формі

Рисунок 3. Початковий стан форми та елементів управління на формі

Налаштувати наступні властивості елементів управління форми:

  • label1.Text = “Form Size = “ (властивість Text елементу управління label1);
  • label2.Text = “Catch me!”;
  • button1.Text = “Form Size”;
  • button2.Text = “Hide/Show”.

Після корегування розмірів деяких елементів управління та налаштування форма матиме вигляд як показано на рисунку 4.

C#. Windows Forms. Урок. Компонент Button. Вигляд форми після налаштування елементів управління

Рисунок 4. Вигляд форми після налаштування елементів управління

 

4.2.3. Програмування події Click компонента button1. Вивести розміри форми

На цьому етапі потрібно запрограмувати обробник події Click компонента button1. Більш детально про особливості програмування події у Microsoft Visual Studio можна підглянути тут.

Текст обробника події button1_Click() наступний:

private void button1_Click(object sender, EventArgs e)
{
  // Обробник події кліку на кнопці button1.
  // Вивести розміри форми, використати властивості Width, Height.
  label1.Text = String.Format("Form Size: W = {0}, H = {1}",
    this.Width, this.Height);
}

Як видно з вищенаведеного коду, за натиском на кнопці button1 у компоненті label1 виводиться інформація про поточні розміри форми. Якщо при виконанні програми спробувати змінити розміри форми і натиснути кнопку button1, то нові розміри знову відобразяться у label1.

 

4.2.4. Програмування події Click компонента button2. Показати або приховати компоненти форми

При натиску на кнопці button2 (“Show/Hide”) повинні бути прихованими або відображеними компоненти label1, label2, button2. Відповідно до цього, в обробнику події Click компонента button2 потрібно ввести наступний текст

private void button2_Click(object sender, EventArgs e)
{
  // Приховати/Показати все - властивість Visible
  button1.Visible = !button1.Visible;
  label1.Visible = !label1.Visible;
  label2.Visible = !label2.Visible;

  if (button1.Visible)
    button2.Text = "Hide";
  else
    button2.Text = "Show";
}

 

4.2.5. Програмування обробника події MouseMove компонента label2

Подія MouseMove будь-якого елементу управління виникає, коли мишка рухається над прямокутною областю цього елементу управління. Компонент типу Label також має можливість програмувати цю подію.

В обробнику події label2_MouseMove() вводиться наступний код

private void label2_MouseMove(object sender, MouseEventArgs e)
{
  // Подія MouseMove для компонента label2 означає, що
  // потрібно зсунути мітку

  // 1. Спроба розміщення області label2
  label2.Left = label2.Left + 10;
  label2.Top = label2.Top - 10;

  // 2. Перевірка, чи мітка вийшла за межі форми за координатою X
  if ((label2.Left < -20) || (label2.Left > this.Width - 20))
  {
    // Якщо мітка вийшла за межі форми за координатою x,
    // то змінити горизонтальну позицію label2
    label2.Left = 10;
  }

  // 3. Перевірка, чи мітка вийшла за межі форми за координатою Y
  if ((label2.Top < -10) || (label2.Top > this.Height - 10))
  {
    // Якщо мітка за межами форми за координатою Y,
    // то змінити вертикальну позицію label2
    label2.Top = 80;
  }
}

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

 


Споріднені теми