C#区分拖放和鼠标点击

问题描述 投票:0回答:3

我有一个允许放置的表单,我还需要捕获点击事件。

这里棘手的部分是,当用户将对象拖放到表单上时,

MouseClickEvent
也会触发 - 因为他还单击了鼠标来释放拖放。

我如何在单独的事件触发器中处理每个事件?

提前致谢!

这是一个简短且更具逻辑性的问题,所以我没有看到在这里放置代码片段的真正原因..

谢谢!

c# events triggers cursor
3个回答
0
投票

添加全局布尔值,例如:

private bool isDragAndDrop;

加载表单时将其设置为 false。当 DragAndDrop 事件被触发时,您应该设置

isDragAndDrop = true

当 Click 事件被触发时,您检查

if(!isDragAndDrop)
这将或不会根据 isDragAndDrop 变量上的值执行 click 事件内的代码。

在离开点击事件之前,您需要设置

isDragAndDrop = false


0
投票

我在这个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 日


0
投票

我知道这个答案可能已经晚了。

但是我最近遇到了这个问题,我尝试了 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
}
© www.soinside.com 2019 - 2024. All rights reserved.