有那条线:

this.button1.Click += this.button2.Click += (s, e) => MessageBox.Show("Test");

为什么这条线不起作用

无法将类型void隐式转换为System.EventHandler

我们需要多留一条线来执行此操作吗? 但是想象一下,如果我们有20个按钮

this.button1.Click += this.button(n).Click += MessageBox.Show("Test");

我知道你会说什么:

您可以为每个按钮做一个for(每个)...

但是,如果我需要选择想要的按钮怎么办?

因此,为什么第一行代码不起作用,并且存在这样的事情(写的方式不同)

===============>>#1 票数:5 已采纳

是的,您需要分别向每个事件添加事件处理程序,并且错误消息告诉您确切原因。 在C#中, this.button2.Click += (s, e) => MessageBox.Show("Test"); 不返回lambda值,因此没有要添加到button1.Click事件的内容。

这也只是普通的坏风格。 我不得不阅读第一行两次,以了解您在哪里尝试。 您绝不应该为了简洁而牺牲清晰度。

===============>>#2 票数:0

如果要将三个或更多按钮连接到单个事件处理程序(嵌入式或固定),则需要将它们放在单独的行上。

    private void Form1_Load(object sender, EventArgs e)
    {
        this.button1.Click += new System.EventHandler(this.button1_Click);
        this.button2.Click += new System.EventHandler(this.button1_Click);
        this.button3.Click += new System.EventHandler(this.button1_Click);

        // OR

        this.button1.Click += (s, a) => ShowMessageBox("Test1");
        this.button2.Click += (s, a) => ShowMessageBox("Test2");
        this.button3.Click += (s, a) => ShowMessageBox("Test3");
    }

    private void button1_Click(object sender, EventArgs e)
    {
        MessageBox.Show("Hello Event World");
    }

    private void ShowMessageBox(string message)
    {
        MessageBox.Show(message);
    }

  ask by Stickly translate from so

未解决问题?本站智能推荐:

3回复

检查是否已附加特定的事件处理程序方法

与此问题相关, 检查事件是否已存在 但不同之处在于我只想知道某个特定方法是否附加到事件中。 所以可能还有其他方法,但我只想知道是否存在特定的方法。 我的环境是dotnet 4.0中的C#。 例如 这可能吗?
2回复

子表单文本框事件处理程序上的父表单方法

我喜欢以20种形式散布的100个文本框,它们在EditValueChanged上都做相同的事情。 这些是DevExpress.XtraEditors.TextEdit控件 有没有一种方法可以在每个ChildForms文本框EditValueChanged中访问父窗体的PropertyE
2回复

C#:如何在具有附加事件处理程序的属性上执行方法(没有堆栈溢出)

设置:我已经在WebBrowser控件上附加了一个事件处理程序,如下所示: 那部分效果很好...但是我正在混乱的网站有时会将URLEncoded信息输入到Input区域,这缺乏良好的人类可读体验。 因此,我试图利用“ onpropertychange”事件来触发一种方法,该方法将对
3回复

用户提供的类型的通用事件生成器和处理程序?

我正在尝试允许用户提供自定义数据并使用自定义类型管理数据。 用户的算法将时间同步事件推送到他们定义的事件处理程序中。 我不确定这是否可行,但这里是我想要构建的“概念证明”代码。 它在for循环中没有检测到T:“找不到类型或命名空间名称'T'” 编辑: 相同的错误,但现在
3回复

框架中的事件异常处理

我正在寻找有关处理事件异常的最佳实践的一些指导。 当前,当我的应用程序中引发异常时,该异常消息会显示在弹出对话框中,然后单击确定后,应用程序将重新启动。 我看到的问题是,某些第三方库的事件处理程序中发生了许多异常,并且这些异常被吞噬且从未显示,因为它们位于后台线程中。 这里有一些人们已经想
3回复

C#:如何处理包含对象的自身事件?

背景: 我的应用程序的UI线程上有一个主对象。 这个长期存在的父对象/容器对象包含一个子对象,该子对象是内部多线程的私有成员。 基于从子对象/包含的对象发布的某些事件,我希望父对象简单地Dispose()子对象并重新创建它。 包含的对象拥有一些非托管资源以及一些大型托管内存缓
5回复

C#代表和事件

我正在尝试学习c#中的委托和事件,我知道事件是委托的某种包装,而委托是函数/方法的指针... 下面是我的代码,但是当我运行它时,什么也没有显示……可能是什么问题? 更新 :我如何引发事件,以便它将已经执行方法?
1回复

事件被声明为Delagate [重复]

这个问题已经在这里有了答案: 分配给空代表的事件声明 2个答案 我是C#的新手。 在查看示例代码时,我发现了以下声明: 这句话是什么意思? 它与我在互联网上看到的其他代表声明不符。 提前致谢。
2回复

活动处理了2个级别

在WPF应用程序(C#)中,我在ClassA类中有一个ObjectX实例。 该ClassA在ClassB中实例化。 因此, ClassB- > 包含 -> ClassA- > 的实例,其中包含 -> ObjectX 的实例 ObjectX引发EventA 。
2回复

实现委托和事件会引发歧义错误

我在自定义控件lnkprev中添加了链接按钮。 现在,我创建了一个委托和一个事件。 我想在单击lnkprev按钮时调用它。 我这样做是为了防止关闭其中调用自定义控件的页面部分。 现在的问题是抛出歧义的错误。 “已经包含“ PagePrev”的定义” 实际上,我没有从在线资源