gpt4 book ai didi

c# - 无法将类型 'void' 隐式转换为 System.Windows.Forms.MouseEventHandler

转载 作者:行者123 更新时间:2023-12-02 17:51:30 25 4
gpt4 key购买 nike

在我的程序中,可以使用之前定义的文本绘制 LinkLabel。当 LinkLabel 可见时,我想在双击 LinkLabel 时打开一个新表单

这是我到目前为止的代码:

private Graphics g;

private int punt1 = 0;
private int punt2 = 0;

private void Form1_MouseUp(object sender, MouseEventArgs e)
{
int x = e.X;
int y = e.Y;

g = this.CreateGraphics();

if (e.X > 20 && e.Y > 100)
{
...

if (rbTekst.Checked && MousePosition.X > 1000)
{
string naam = tbUseCaseName.Text;
LinkLabel lb = new LinkLabel();
UseCase uc = new UseCase();
lb.MouseDoubleClick += uc.Show();
lb.Location = e.Location;
lb.Text = naam;
this.Controls.Add(lb);
}

除了 DoubleClick 事件之外,一切都运行良好。我收到以下错误消息:

Cannot implicitly convert type 'void' to 'System.Windows.Forms.MouseEventHandler'

发生此错误是因为 Form1_MouseUp 具有 MouseEventsArgs e 吗?

提前致谢!

最佳答案

您正在尝试将调用 uc.Show();结果指定为 MouseDoubleClick 事件的事件处理程序。该方法返回 void,这会导致您看到错误消息。

如果 UseCase.Show 的签名**与事件处理程序的预期签名匹配,您只需分配方法本身:

lb.MouseDoubleClick += uc.Show;

根据您的评论,签名似乎不匹配。在这种情况下,您可以创建一个匿名事件处理程序,仅调用您想要调用的方法:

lb.MouseDoubleClick += (sender, e) =>  uc.Show();

我个人更喜欢将方法体括在花括号中,但这不是必需的:

lb.MouseDoubleClick += (sender, e) => { uc.Show(); };

您还可以创建一个方法来处理其中的点击和调用显示:

lb.MouseDoubleClick += lb_MouseDoubleClick;
...
void lb_MouseDoubleClick(object sender, MouseEventArgs e)
{
uc.Show();
}

** 方法的签名是指该方法在访问修饰符、返回值及其接受的任何参数方面的外观。我猜想 uc 是一个 Form,在这种情况下,Show 方法返回 void 并且不接受任何参数。 MouseDoubleClick 事件需要一个采用 objectMouseEventArgs 的方法。

关于c# - 无法将类型 'void' 隐式转换为 System.Windows.Forms.MouseEventHandler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28696979/

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