Практическое руководство. Прием событий в приложениях Windows Forms
Обновлен: Ноябрь 2007
Распространенным сценарием в приложениях Windows Forms является отображение на форме элементов управления и последующее выполнение определенных действий в зависимости от того, какой элемент управления выбран пользователем. Например, элемент управления Button вызывает событие, когда пользователь щелкает его на форме. При обработке события приложение может выполнить соответствующую логику приложения после нажатия кнопки.
Дополнительные сведения о Windows Forms см. в разделе Приступая к работе с Windows Forms.
Обработка события при нажатии кнопки на форме Windows Form
Создайте форму Windows Form, на которой есть элемент управления Button.
private Button button;
Private WithEvents myButton As Button
Определите обработчик событий, который соответствует подписи делегата события Click. Событие Click использует класс EventHandler для типа делегата и класс EventArgs для данных события.
void Button_Click(object sender, EventArgs e) {...}
Sub Button_Click(sender As Object, e As EventArgs) ... End Sub
Добавьте метод обработчика событий к событию Click элемента управления Button.
button.Click += new EventHandler(this.Button_Click);
AddHandler myButton.Click, AddressOf Me.Button_Click
Примечание.
Конструктор (например Visual Studio 2005) выполняет привязку события посредством генерации кода, аналогичного коду в этом примере.
Пример
Следующий пример кода обрабатывает событие Click элемента управления Button для изменения фонового цвета TextBox. Фрагменты, выделенные полужирным шрифтом, показывают код обработчика событий и способ связывания обработчика событий с событием Click элемента управления Button.
Код в этом примере написан без использования визуального конструктора (такого Visual Studio 2005) и содержит только важнейшие элементы программирования. При использовании конструктора создается дополнительный код.
[C#]
using System;
using System.ComponentModel;
using System.Windows.Forms;
using System.Drawing;
public class MyForm : Form
{
private TextBox box;
private Button button;
public MyForm() : base()
{
box = new TextBox();
box.BackColor = System.Drawing.Color.Cyan;
box.Size = new Size(100,100);
box.Location = new Point(50,50);
box.Text = "Hello";
button = new Button();
button.Location = new Point(50,100);
button.Text = "Click Me";
// To wire the event, create
// a delegate instance and add it to the Click event.
button.Click += new EventHandler(this.Button_Click);
Controls.Add(box);
Controls.Add(button);
}
// The event handler.
private void Button_Click(object sender, EventArgs e) { box.BackColor = System.Drawing.Color.Green; }
// The STAThreadAttribute indicates that Windows Forms uses the
// single-threaded apartment model.
[STAThreadAttribute]
public static void Main(string[] args)
{
Application.Run(new MyForm());
}
}
[Visual Basic]
Option Strict On
Imports System.ComponentModel
Imports System.Windows.Forms
Imports System.Drawing
Public Class MyForm
Inherits Form
Private box As TextBox
Private WithEvents myButton As Button
Public Sub New()
box = New TextBox()
box.BackColor = System.Drawing.Color.Cyan
box.Size = New Size(100, 100)
box.Location = New Point(50, 50)
box.Text = "Hello"
myButton = New Button()
myButton.Location = New Point(50, 100)
myButton.Text = "Click Me"
AddHandler myButton.Click, AddressOf Me.Button_Click
Controls.Add(box)
Controls.Add(myButton)
End Sub
' The event handler.
Private Sub Button_Click(sender As Object, e As EventArgs) box.BackColor = System.Drawing.Color.Green End Sub
' The STAThreadAttribute indicates that Windows Forms uses the
' single-threaded apartment model.
<STAThreadAttribute()> _
Public Shared Sub Main(args() As String)
Application.Run(New MyForm())
End Sub
End Class
Компиляция кода
Сохраните предыдущий код в файл (с расширением .cs для файла C# и .vb для файла Visual Basic 2005), скомпилируйте и выполните. Например, если исходный файл имеет имя WinEvents.cs (или WinEvents.vb), выполните следующую команду:
csc /r:System.DLL /r:System.Windows.Forms.DLL /r:System.Drawing.DLL WinEvents.cs
vbc /r:System.DLL /r:System.Windows.Forms.DLL /r:System.Drawing.DLL WinEvents.vb
Полученный исполняемый файл будет иметь имя WinEvents.exe.