gpt4 book ai didi

c# - 不能将按钮作为参数传递

转载 作者:太空宇宙 更新时间:2023-11-03 18:08:04 24 4
gpt4 key购买 nike

我在这里尝试做的非常简单,但对我不起作用。我在stackoverflow和其他人上查找了许多非常相似或匹配的问题示例,他们的解决方案对我不起作用。

基本上(以非常简化的形式),我有一个带有一些文本的按钮。我想要它,所以当单击此按钮时,会出现一个显示文本的消息框。但是,我有 9 个这样的按钮(想想计算器上的数字),我想创建一个处理所有这些点击的方法,并根据按钮输出正确的文本。这就是为什么我需要将按钮作为参数传递。

这是我迄今为止处理它的方法的代码:

private void btn_Click(object sender, EventArgs e, Button b)
{
MessageBox.Show(b.Text);
}

上面的小代码片段与其他人使用和工作的解决方案相同。但是,对我而言,此代码无法编译并显示错误 'btn_Click' 没有重载匹配委托(delegate) 'System.EventHandler' .

当我双击该错误时,它会将我带到表单的 Designer.cs 页面,这是有错误的代码行:
this.btnN7.Click += new System.EventHandler(this.btnN7_Click);

我不知道重载和委托(delegate)部分是什么意思,对不起,我对此很陌生。我在想也许重载与构造函数有关,但即使这是正确的,我也不确定下一步会是什么。

我有 System.Windows.Forms; 正确包含,因此问题不应该是无法识别 Button 对象。

如果您可以提供有关我缺少什么或做错了什么的任何见解,那就太好了!如果您需要任何其他信息以继续,请告诉我。

最后,这与我的问题无关,但自从我一周前开始使用 VS 以来,这是一个一直困扰我的小问题:控制参数是否 对象发送者事件参数 e 甚至有必要为 Controller 事件自动创建?我在网上查找的大多数示例都省略了它们。我只是保留它们,因为它们是默认创建的,但我真的不知道它们提供什么样的功能,而且我从来没有在我的方法中使用这些参数。

谢谢大家! =)

最佳答案

你只需要使用sender参数。如果方法签名与 EventHandler 不匹配,则无法订阅事件处理程序代表。

private void btn_Click(object sender, EventArgs e)
{
var currentButton = sender as Button;
if(currentButton != null) MessageBox.Show(currentButton.Text);
}
sender将分配给触发事件的对象。例如,当您的 button2被点击,会被分配到 button2 .当然您需要将此事件处理程序附加到 button2的点击事件。我也用过 as操作符来确保触发一个按钮的事件。以后如果你像 btn_Click(this, EventArgs.Empty) 那样手动调用这个方法那么显式转换将抛出 InvalidCastException .使用 as运算符总是最好避免这种情况。如果 sender 的类型不同于 Button然后 currentButton将是 .

关于c# - 不能将按钮作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22485740/

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