无法将类型 '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_MouseUp有MouseEventsArgs 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 值和它接受的任何参数方面的样子。我猜 uc
是 Form
在这种情况下 Show
方法 returns void
并且不接受任何参数。 MouseDoubleClick
事件需要一个采用 object
和 MouseEventArgs
.
的方法
在我的程序中,可以使用之前定义的文本绘制一个 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
事件的事件处理程序。该方法 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 值和它接受的任何参数方面的样子。我猜 uc
是 Form
在这种情况下 Show
方法 returns void
并且不接受任何参数。 MouseDoubleClick
事件需要一个采用 object
和 MouseEventArgs
.