我有一个允许放置的表单,我还需要捕获点击事件。
这里棘手的部分是,当用户将对象拖放到表单上时,
MouseClickEvent
也会触发 - 因为他还单击了鼠标来释放拖放。
我如何在单独的事件触发器中处理每个事件?
提前致谢!
这是一个简短且更具逻辑性的问题,所以我没有看到在这里放置代码片段的真正原因..
谢谢!
添加全局布尔值,例如:
private bool isDragAndDrop;
加载表单时将其设置为 false。当 DragAndDrop 事件被触发时,您应该设置
isDragAndDrop = true
。
当 Click 事件被触发时,您检查
if(!isDragAndDrop)
这将或不会根据 isDragAndDrop 变量上的值执行 click 事件内的代码。
在离开点击事件之前,您需要设置
isDragAndDrop = false
我在这个link
上找到了这个解决方案 private void MyMouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left && e.Clicks == 1)
{
Control source = (Control)sender;
source.DoDragDrop(new MyWrapper(source), DragDropEffects.Move);
}
}
作者:比尔·罗林森 — 2007 年 4 月 18 日
我知道这个答案可能已经晚了。
但是我最近遇到了这个问题,我尝试了 stackoverflow 中的大部分答案,但仍然没有运气。
最后我用下面的代码解决了这个问题。
希望可以提供一些帮助。
public int clickCnt = 0;
void btn_MouseMove(object sender, MouseEventArgs e)
{
Button btn = (Button)sender;
if (e.Button == MouseButtons.Left)
{
clickCnt++;
if (clickCnt > 5)
{
DoDragDrop(btn, DragDropEffects.Move);
}
}
}
void btn_MouseUp(object sender, MouseEventArgs e)
{
clickCnt = 0;
}
void btn_MouseClick(object sender, MouseEventArgs e)
{
Debug.Print("btnConn_MouseClick");
//Do click thing
}
//this should replace the component that you want process dragdrop event.
void tabControl1_DragDrop(object sender, DragEventArgs e)
{
clickCnt = 0;
//Do drop thing
}