添加MouseDown事件后Winform MouseDoubleClick事件未触发

时间:2015-09-03 12:36:24

标签: c# .net winforms

我正在创建用户控件。它可以拖动,也可以选择。并且需要单击,然后双击。

首先,我在鼠标点击事件中添加了Selected属性。但它只会在鼠标向上后开火。然后我更改了我的解决方案,我将其添加到鼠标按下事件

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
}

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

  

调用DoDragDrop()将取消鼠标捕获

但我仍然想知道,有没有办法让DragDouble Click事件保持一致?

1 个答案:

答案 0 :(得分:1)

实际上在你知道我在我的问题更新中说的原因之后,它很容易修复。 我们应该声明一个变量来识别draw:

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;
    }
}

如您所见,您只能DoDragDrop() IsCanDraw == true validate 那么鼠标双击事件就可以了。

来自(VB.NET)的原创想法:

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

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