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

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

在我的程序中,可以使用之前定义的文本绘制一个 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_MouseUpMouseEventsArgs e吗?

提前致谢!

您正在尝试将调用 uc.Show(); 结果 指定为 MouseDoubleClick 事件的事件处理程序。该方法 returns 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();
}

** 方法的签名是方法在访问修饰符、return 值和它接受的任何参数方面的样子。我猜 ucForm 在这种情况下 Show 方法 returns void 并且不接受任何参数。 MouseDoubleClick 事件需要一个采用 objectMouseEventArgs.

的方法