C# 无法隐式转换类型';无效';到System.Windows.Forms.MouseEventHandler

C# 无法隐式转换类型';无效';到System.Windows.Forms.MouseEventHandler,c#,mouseevent,double-click,C#,Mouseevent,Double Click,在我的程序中,可以用前面定义的文本绘制链接标签。当链接标签可见时,我想在双击链接标签时打开一个新表单 这是我目前掌握的代码: private Graphics g; private int punt1 = 0; private int punt2 = 0; private void Form1_MouseUp(object sender, MouseEventArgs e) { int x = e.X;

在我的程序中,可以用前面定义的文本绘制链接标签。当链接标签可见时,我想在双击链接标签时打开一个新表单

这是我目前掌握的代码:

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);
                }
除了双击事件,一切都很好。我收到以下错误消息:

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

发生此错误是因为Form1\u 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
是一个
表单
,在这种情况下
Show
方法返回
void
,不接受任何参数。
MouseDoubleClick
事件需要一个方法,该方法接受一个
对象和一个
MouseEventArgs

尝试移除
show
-
lb.MouseDoubleClick+=uc.show上的括号这可能足够了-很难说。
UseCase.Show的签名是什么?@petelids-Nope:Show匹配没有重载delegate@JonSkeet应为具有“void Show(object,MouseEventsArgs)”的方法'signature我在问
UseCase
中的
Show
方法是什么样子的-您还没有告诉我们。访问修饰符和返回类型不是该方法的一部分signature@ASh-上面不是这么说的-方法通过指定访问级别(如public或private)在类或结构中声明,可选修饰符,如抽象或密封、返回值、方法名称和任何方法参数。这些部分一起是方法的签名。
方法的返回类型不是方法重载的签名的一部分。但是,在确定委托和它所指向的方法之间的兼容性时,它是方法签名的一部分。
好吧,如果是委托人,我的评论是离题的!搜索了两天,寻找你关于匿名事件处理程序的评论。