Aracılığıyla paylaş


Nasıl yapılır: bir Windows Forms uygulaması içinde olayları tüketebilir

Form denetimleri ile görüntüleyip, kullanıcı kontrol dayalı belirli bir eylemi gerçekleştirmek için Windows Forms uygulamalarında sık karşılaşılan bir senaryo var. Örneğin, bir Button denetim kullanıcı formunda tıklattığında bir olay yükseltir. Olay işleme, uygulamanıza uygun uygulama mantığı için bu düğmeyi tıklatın gerçekleştirebilirsiniz.

Windows formları hakkında daha fazla bilgi için bkz: Windows Forms ile çalışmaya başlama.

Bir düğme tıklatma olay bir Windows formundaki işlemek için

  1. Sahip bir Windows formu oluşturmaya bir Button denetim.

    Private WithEvents myButton As Button
    
    private Button button;
    
    private:
        Button^ button;
    
  2. Eşleşen bir olay işleyicisi 'I olay temsilci imza. 'I olayı kullanan EventHandler temsilci türü sınıfı ve EventArgs Olay verileri için sınıf.

    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. Olay işleyicisi yöntemine ekleyin 'I , olay düğmesini.

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

    Not

    Bir tasarımcı (gibi Visual Studio 2005) Bu olay kablolama, bu örnekteki koda benzer kodu üreterek yapın.

Örnek

Aşağıdaki kod örneği tutamaçları 'I olayının bir düğmesini arka plan rengini değiştirmek için bir TextBox. Olay işleyicisi ve nasıl için yapılandırıldığında kalın öğeleri göster 'I , olay düğmesini.

Bu örnek kodda visual designer'ı kullanarak olmadan yazılmıştır (gibi Visual Studio 2005) ve yalnızca temel programlama öğeleri içerir. Bir tasarımcı kullanıyorsanız, ek kodu üretir.

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

Kod Derleniyor

Yukarıdaki kodu bir dosyaya kaydedin (C# dosya ve .vb için .cs uzantılı Visual Basic 2005), derleme ve çalıştırma. Örneğin, kaynak dosyanın WinEvents.cs (veya WinEvents.vb) ise, aşağıdaki komutu çalıştırın:

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

Yürütülebilir dosyanızı WinEvents.exe olacaktır.

Ayrıca bkz.

Kavramlar

Olaylar ve temsilciler

Olayları tüketen

Bir olayý çaðýrmak

Diğer Kaynaklar

İşleme ve olaylarını tetiklemeye yönelik