这叫什么?我想处理CLR DLL生成的“事件”

时间:2009-08-25 23:22:11

标签: events dll clr

所以我是一名Visual Basic 6开发人员,转而使用CLR,需要回答一个真正的新问题。

在Visual Basic 6中,如果你有一个ActiveX控件,你可以引用该控件,然后有一个语句基本上说:

Public WithEvents YourControl(强调“WithEvents”关键字)

在Visual Basic中,您将拥有一组用于该控件的事件处理函数。您只需从下拉列表中选择它们,就会生成一个空的处理程序。

我正在寻找与VS2008(Winform)相同的东西。如何在Visual Studio 2008 IDE中访问该功能?我在Winform项目中引用了CLR DLL项目。我只需要知道如何访问该CLR DLL的函数/类。

谢谢!

2 个答案:

答案 0 :(得分:1)

答案取决于您使用的语言。

如果您使用的是Visual Basic .NET

语法实际上是一样的。在所有.NET语言中,事件只是delegates,它们基本上是函数指针,可以指向相同签名的零个或多个函数。

WithEvents关键字不是绝对处理VB.NET中的事件所必需的,但它确实为开发人员提供了使用旧式VB风格事件处理程序的能力(以及是设计师如何做到这一点。它可以像你熟悉的那样完成,比如这个

Private WithEvents YourControl as Control

Private Sub ClickFunction(ByVal sender as Object, ByVal e as EventArgs) Handles YourControl.Click
    'do things
End Sub

要在没有WithEvents关键字的对象上处理事件,请使用AddHandler

AddHandler YourControl.Click, AddressOf ClickFunction

Private Sub ClickFunction(ByVal sender as Object, ByVal e as EventArgs)
    'do things
End Sub

如果您对编辑器顶部组合框中的事件感兴趣,您只需要使用WithEvents关键字声明变量。只需在左侧菜单中找到您感兴趣的变量,然后事件就会显示在右侧的菜单中。

如果您使用的是C#.NET

C#中没有这样的功能。必须明确附加所有事件处理程序,如此

private Control YourControl;

private void ClickFunction(Object sender, EventArgs e)
{
    // do stuff
}

// to attach, this goes somewhere in code

//...
YourControl.Click += ClickFunction;
//...

答案 1 :(得分:0)

在事件播音员课程中:

public event EventHandler MyEvent;

void OnMyEvent()
{
    if (MyEvent != null)
        MyEvent(this, EventArgs.Empty);
}

在事件接收类中:

obj.MyEvent += new EventHandler(obj_MyEvent);

void obj_MyEvent(object sender, EventArgs e)
{
    // Do something as a result of the event here
}

语法在C#中,VB.NET类似