如何使用addHandler引发事件

时间:2009-09-28 18:25:01

标签: c# vb.net c#-3.0 events handler

我对Vb.Net事件和处理程序很满意。 任何人都可以帮助我如何在c#中创建事件处理程序,并引发事件。

4 个答案:

答案 0 :(得分:11)

只知道C#或只知道VB.Net的开发人员可能不知道这是VB.NET和C#之间的较大差异之一。

我将shamelesssly copy对VB事件的这个很好的解释:VB使用声明性语法来附加事件。 Handles子句出现在将处理事件的代码上。适当时,多个方法可以处理相同的事件,并且可以通过相同的方法处理多个事件。使用Handles子句依赖于基础变量声明中出现的WithEvents修饰符,例如按钮。您还可以使用AddHandler关键字附加属性处理程序,并使用RemoveHandler删除它们。例如

Friend WithEvents TextBox1 As System.Windows.Forms.TextBox   

Private Sub TextBox1_Leave(ByVal sender As System.Object, _
  ByVal e As System.EventArgs) Handles TextBox1.Leave
  'Do Stuff '
End Sub

在C#中,您无法使用声明性语法。你使用重载的+ =来充当VB.Net AddHandler。这是一个从tster's answer无耻地被盗的例子:

public MyClass()
{
    InitializeComponent();
    textBox1.Leave += new EventHandler(testBox1_Leave);
}

void testBox1_Leave(object sender, EventArgs e)
{
  //Do Stuff
}

答案 1 :(得分:7)

在C#2及以上版本中添加如下事件处理程序:

yourObject.Event += someMethodGroup;

someMethodGroup的签名与yourObject.Event的代理签名匹配。

在C#1中,您需要显式创建一个这样的事件处理程序:

yourObject.Event += new EventHandler(someMethodGroup);

现在方法组,事件和EventHandler的签名必须匹配。

答案 2 :(得分:3)

    public MyClass()
    {
        InitializeComponent();
        textBox1.LostFocus += new EventHandler(testBox1_LostFocus);
    }

    void testBox1_LostFocus(object sender, EventArgs e)
    {
        // do stuff
    }

答案 3 :(得分:0)