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


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

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

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

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

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

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

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

    AddHandler myButton.Click, AddressOf Me.Button_Click
    
    button.Click += new EventHandler(this.Button_Click);
    
    button->Click += gcnew EventHandler(this, &SnippetForm::Button_Click);
    
    ПримечаниеПримечание

    Конструктор (например Visual Studio 2005) выполняет привязку события посредством генерации кода, аналогичного коду в этом примере.

Пример

Следующий пример кода обрабатывает событие Click элемента управления Button для изменения фонового цвета TextBox. Фрагменты, выделенные полужирным шрифтом, показывают код обработчика событий и способ связывания обработчика событий с событием Click элемента управления Button.

Код в этом примере написан без использования визуального конструктора (такого Visual Studio 2005) и содержит только важнейшие элементы программирования. При использовании конструктора создается дополнительный код.

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.
    <STAThread> _
    Public Shared Sub Main()
        Application.Run(New MyForm())
    End Sub
End Class
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.
    [STAThread]
    public static void Main()
    {
        Application.Run(new MyForm());
    }
}
#using <System.dll>
#using <System.Windows.Forms.dll>
#using <System.Drawing.dll>

using namespace System;
using namespace System::ComponentModel;
using namespace System::Windows::Forms;

public ref class MyForm : Form
{
private:
    TextBox^ box;
    Button^ button;

public:
    MyForm() : Form()
    {
        box = gcnew TextBox();
        box->BackColor = System::Drawing::Color::Cyan;
        box->Size = System::Drawing::Size(100,100);
        box->Location = System::Drawing::Point(50,50);
        box->Text = "Hello";

        button = gcnew Button();
        button->Location = System::Drawing::Point(50,100);
        button->Text = "Click Me";

        // To wire the event, create
        // a delegate instance and add it to the Click event.
        button->Click += gcnew EventHandler(this, &MyForm::Button_Click);
        Controls->Add(box);
        Controls->Add(button);
    }

private:
    // The event handler.
    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.
public:
    [STAThread]
    static void Main()
    {
        Application::Run(gcnew MyForm());
    }
};

int main()
{
    MyForm::Main();
}

Компиляция кода

Сохраните предыдущий код в файл (с расширением CS для файла C# и VB для файла Visual Basic 2005), скомпилируйте и выполните. Например, если исходный файл имеет имя WinEvents.cs (или WinEvents.vb), выполните следующую команду:

vbc /r:System.DLL /r:System.Windows.Forms.dll /r:System.Drawing.dll WinEvents.vb
csc /r:System.DLL /r:System.Windows.Forms.dll /r:System.Drawing.dll WinEvents.vb
cl /clr:pure WinEvents.cpp

Полученный исполняемый файл будет иметь имя WinEvents.exe.

См. также

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

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

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

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

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

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