gpt4 book ai didi

c# - 如何将事件传递给方法?

转载 作者:IT王子 更新时间:2023-10-29 04:24:22 25 4
gpt4 key购买 nike

我想创建一个方法,将事件作为参数并向其添加 eventHandler 以正确处理它。像这样:

我有两个事件:

public event EventHandler Click;
public event EventHandler Click2;

现在我想像这样(伪代码)将特定事件传递给我的方法:

public AttachToHandleEvent(EventHandler MyEvent)
{
MyEvent += Item_Click;
}

private void Item_Click(object sender, EventArgs e)
{
MessageBox.Show("lalala");
}

ToolStripMenuItem tool = new ToolStripMenuItem();
AttachToHandleEvent(tool.Click);

这可能吗?

我注意到这段代码运行良好,并返回到我的项目并注意到当我传递一个在我的类中声明的事件时,它起作用了,但是当我传递来自其他类的事件时它仍然不起作用。

我得到的是这个错误:

The event 'System.Windows.Forms.ToolStripItem.Click' can only appear on the left hand side of += or -=

最佳答案

我的原始答案适用于定义事件的类中,但你已经更新了你的问题以反射(reflect)你希望从定义类之外完成这个,所以我已经解决了。

只有定义事件的类才能引用事件使用的隐式委托(delegate)变量。在该类之外,您只能通过 +=-= 访问 addremove 方法.这意味着您不能直接执行您要求的操作。但是,您可以使用函数式方法。

class A{
public event EventHandler Event1;

public void TriggerEvent1(){
if(Event1 != null)
Event1(this, EventArgs.Empty);
}
}

class B{
static void HandleEvent(object o, EventArgs e){
Console.WriteLine("Woo-hoo!");
}

static void AttachToEvent(Action<EventHandler> attach){
attach(HandleEvent);
}

static void Main(){
A a = new A();
AttachToEvent(handler=>a.Event1 += handler);
a.TriggerEvent1();
}
}

关于c# - 如何将事件传递给方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2560258/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com