Поделиться через


Практическое руководство. Прием событий в приложениях Windows Forms

Обновлен: Ноябрь 2007

Распространенным сценарием в приложениях Windows Forms является отображение на форме элементов управления и последующее выполнение определенных действий в зависимости от того, какой элемент управления выбран пользователем. Например, элемент управления Button вызывает событие, когда пользователь щелкает его на форме. При обработке события приложение может выполнить соответствующую логику приложения после нажатия кнопки.

Дополнительные сведения о Windows Forms см. в разделе Приступая к работе с Windows Forms.

Обработка события при нажатии кнопки на форме Windows Form

  1. Создайте форму Windows Form, на которой есть элемент управления Button.

    private Button button;
    
    Private WithEvents myButton As Button
    
  2. Определите обработчик событий, который соответствует подписи делегата события Click. Событие Click использует класс EventHandler для типа делегата и класс EventArgs для данных события.

    void Button_Click(object sender, EventArgs e)
    {...}
    
    Sub Button_Click(sender As Object, e As EventArgs)
    ...
    End Sub
    
  3. Добавьте метод обработчика событий к событию Click элемента управления Button.

    button.Click += new EventHandler(this.Button_Click);
    
    AddHandler myButton.Click, AddressOf Me.Button_Click
    
    0y0987sc.alert_note(ru-ru,VS.90).gifПримечание.

    Конструктор (например 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.

См. также

Основные понятия

События и делегаты

Прием событий

Вызов события

Другие ресурсы

Обработка и вызов событий