gpt4 book ai didi

c# - 添加 MouseDown 事件后未触发 Winform MouseDoubleClick 事件

转载 作者:太空宇宙 更新时间:2023-11-03 13:00:43 25 4
gpt4 key购买 nike

我正在创建一个用户控件。可以拖动,也可以选择。并且需要可以得到单击,双击。

首先,我在鼠标点击事件 中添加了 Selected 属性。但它只会在 Mouse up 后触发。然后我改变我的解决方案,我将它添加到 Mouse Down 事件:

private void MyControl_MouseDown(object sender, MouseEventArgs e)
{
if (!Selected)
{
Selected = true;

if (e.Button == System.Windows.Forms.MouseButtons.Left)
{
this.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
}
else if(e.Button == System.Windows.Forms.MouseButtons.Right)
{
if (null != MouseRightClick)
MouseRightClick(model, this);
}
}
}

但在那之后,我再也无法获得鼠标双击事件了:

private void MyControl_MouseDoubleClick(object sender, MouseEventArgs e)
{
// do something
}

更新我看到你们给我的链接,我知道原因是:

that calling DoDragDrop() will cancel mouse capture

但我还是想知道,有什么方法可以让DragDouble Click事件保持一致吗?

最佳答案

实际上,在您知道我在问题更新中所说的原因后,修复起来就很容易了。我们应该声明一个用于识别抽奖的变量:

private bool IsCanDraw = false;

那你应该把它添加到Mouse Down

private void MyControl_MouseDown(object sender, MouseEventArgs e)
{
if (e.Clicks != 1)
{
IsCanDraw = false;
}
else
{
IsCanDraw = true;
}

// your other code

}

并且您需要将鼠标移动更改为:

private void MyControl_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left & IsCanDraw)
{
this.DoDragDrop(this, DragDropEffects.Move);
// Disables IsCanDraw method until next drag operation
IsCanDraw = false;
}
}

如您所见,当 IsCanDraw == true 时,您只能执行 DoDragDrop()然后你的鼠标双击事件就可以了。


最初的想法来自(VB.NET):

http://vbcity.com/forums/t/100458.aspx

http://sagistech.blogspot.com/2010/03/dodragdrop-prevent-doubleclick-event.html

关于c# - 添加 MouseDown 事件后未触发 Winform MouseDoubleClick 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32375830/

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