我正在创建用户控件。它可以拖动,也可以选择。并且需要单击,然后双击。
首先,我在鼠标点击事件中添加了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()将取消鼠标捕获
但我仍然想知道,有没有办法让Drag
与Double Click
事件保持一致?
答案 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