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 Forms. Класс 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, не получится.

 


Связанные темы