相关疑难解决方法(0)

是否有可能从一个控件"窃取"一个事件处理程序并将其交给另一个控件?

我想做这样的事情:

Button btn1 = new Button();
btn1.Click += new EventHandler(btn1_Click);
Button btn2 = new Button();
// Take whatever event got assigned to btn1 and assign it to btn2.
btn2.Click += btn1.Click; // The compiler says no...
Run Code Online (Sandbox Code Playgroud)

其中btn1_Click已在类中定义:

void btn1_Click(object sender, EventArgs e)
{
    //
}
Run Code Online (Sandbox Code Playgroud)

当然,这不会编译("事件'System.Windows.Forms.Control.Click'只能出现在+ =或 - ="的左侧).有没有办法从一个控件获取事件处理程序并在运行时将其分配给另一个控件?如果那是不可能的,重复事件处理程序并在运行时将其分配给另一个控件吗?

有几点:我已经用Google搜索了一段时间,但却发现还没办法做到这一点.大多数尝试过的方法都涉及反射,因此如果您阅读我的问题并认为答案非常明显,请首先尝试在Visual Studio中编译代码.或者,如果答案确实非常明显,请随时给我打电话.谢谢,我真的很期待看到这是否可行.

我知道我可以这样做:

btn2.Click += new EventHandler(btn1_Click);
Run Code Online (Sandbox Code Playgroud)

这不是我在这里寻找的东西.

这也不是我想要的:

EventHandler handy = new EventHandler(btn1_Click);
Button btn1 = new Button();
btn1.Click += handy;
Button btn2 = new Button();
btn2.Click += handy;
Run Code Online (Sandbox Code Playgroud)

.net c#

12
推荐指数
1
解决办法
6054
查看次数

有没有办法在VB.NET中知道是否为事件注册了处理程序?

在C#中,我可以测试一下......

public event EventHandler Trigger;
protected void OnTrigger(EventArgs e)
{
    if (Trigger != null)
        Trigger(this, e);
}
Run Code Online (Sandbox Code Playgroud)

有没有办法在VB.NET中执行此操作?测试null我的意思是?

更多信息

我忘了提.我有用C#编写的类,但我在VB.NET中编写单元测试.

我在单元测试中尝试这个...

If myObject.Trigger IsNot Nothing Then  
    ''#do something
End If
Run Code Online (Sandbox Code Playgroud)

这导致编译时错误,该错误表示......"公共事件触发器是一个事件,无法直接调用.使用RaiseEvent语句引发事件."

赛斯

.net c# vb.net null events

11
推荐指数
3
解决办法
9465
查看次数

标签 统计

.net ×2

c# ×2

events ×1

null ×1

vb.net ×1