Sdílet prostřednictvím


Postupy: Zacházení s událostmi v aplikacích modelu Windows Forms

Běžným scénářem v aplikacích modelu Windows Forms je zobrazit formulář s ovládacími prvky a pak provést konkrétní akce na základě ovládacího prvku, na který kliknul uživatel. Například ovládací prvek Button vyvolá událost, když uživatel klikne ve formuláři. Zpracováním události vaše aplikace může provádět příslušnou aplikační logiku pro dané kliknutí na tlačítko.

Další informace o modelu Windows Forms naleznete v tématu Getting Started with Windows Forms.

Pro zpracování události kliknutí na tlačítko ve formuláři systému Windows

  1. Vytvořte formulář systému Windows, který má ovládací prvek Button.

    Private WithEvents myButton As Button
    
    private Button button;
    
    private:
        Button^ button;
    
  2. Definujte obslužnou rutinu události odpovídající podpisu delegáta události Click. Událost Click používá třídu EventHandler pro typ delegáta a třídu EventArgs pro data události.

    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. Přidejte metodu obslužné rutiny události k události Click pro Button.

    AddHandler myButton.Click, AddressOf Me.Button_Click
    
    button.Click += new EventHandler(this.Button_Click);
    
    button->Click += gcnew EventHandler(this, &SnippetForm::Button_Click);
    
    PoznámkaPoznámka

    Designer (například Visual Studio 2005) za vás udělá spojení události generováním kódu, který je podobný kódu v tomto příkladu.

Příklad

Následující ukázka kódu zpracovává událost Click od Button pro změnu barvy pozadí prvku TextBox. Tučné prvky, zobrazují obslužné rutiny události a to, jak jsou propojeny s událostí Click od Button.

Kód v tomto příkladu byl zapsán bez použití vizuálního designeru (například Visual Studio 2005) a obsahuje pouze základní programovací prvky. Pokud používáte designer, je vytvořen další kód.

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();
}

Probíhá kompilace kódu

Uložit předcházející kód do soubor (s příponou .cs pro soubor jazyka C# a s příponou .vb pro kód Visual Basic 2005), zkompilujte a spusťte. Například pokud je zdrojový soubor pojmenován WinEvents.cs (nebo WinEvents.vb), spusťte následující příkaz:

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

Spustitelný soubor bude pojmenován WinEvents.exe.

Viz také

Koncepty

Události a Delegáti

Zpracování událostí

Vyvolání události

Další zdroje

Zpracování a vyvolávání událostí