Jul*_*les 2 c# double-click mouseevent
在我的程序中,可以使用之前定义的文本绘制一个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);
}
Run Code Online (Sandbox Code Playgroud)
除DoubleClick事件外,其他所有功能都运作良好。我收到以下错误消息:
无法将类型“ void”隐式转换为“ System.Windows.Forms.MouseEventHandler”
因为Form1_MouseUp具有MouseEventsArgs e会发生此错误吗?
提前致谢!
您正在尝试将调用结果分配uc.Show();为事件的事件处理程序MouseDoubleClick。该方法返回void,从而导致您看到错误消息。
如果的签名** UseCase.Show与事件处理程序的预期签名匹配,则可以只分配方法本身:
lb.MouseDoubleClick += uc.Show;
Run Code Online (Sandbox Code Playgroud)
根据您的评论,尽管签名似乎不匹配。在这种情况下,您可以创建一个匿名事件处理程序,该事件处理程序仅调用您要调用的方法:
lb.MouseDoubleClick += (sender, e) => uc.Show();
Run Code Online (Sandbox Code Playgroud)
我个人更喜欢将方法主体括在花括号中,但这不是必需的:
lb.MouseDoubleClick += (sender, e) => { uc.Show(); };
Run Code Online (Sandbox Code Playgroud)
您还可以创建一种方法来处理其中的点击和通话显示:
lb.MouseDoubleClick += lb_MouseDoubleClick;
...
void lb_MouseDoubleClick(object sender, MouseEventArgs e)
{
uc.Show();
}
Run Code Online (Sandbox Code Playgroud)
**方法的签名是该方法在访问修饰符,返回值和它接受的任何参数方面的外观。我猜这uc是Form在这种情况下该Show方法返回void并且不接受任何参数。该MouseDoubleClick事件需要采用object和的方法MouseEventArgs。
| 归档时间: |
|
| 查看次数: |
3099 次 |
| 最近记录: |