防止鼠标移动后的鼠标单击事件

本文关键字:鼠标 单击 事件 移动 | 更新日期: 2023-09-27 18:37:28

我在可垂直拖动的标签页中有一个用户控件。该控件也是可选的。我希望用户能够单击该项目以选择它,但我不希望在他们完成拖动后触发 MouseClick 事件 - 只有 MouseUp 事件应该触发。即。用户完成拖动后,不应选择该项目。有什么建议吗?

防止鼠标移动后的鼠标单击事件

我假设这是WinForms。

当你说你有一个用户控件时,你的意思是你有一个派生自UserControl的类吗?在这种情况下,您可以覆盖 OnMouseClick 方法而不调用 base.OnMouseClick(e) ,这将防止MouseClick触发。

就像 SamHi 建议的那样,您可以使用在拖动开始时设置为true的布尔值,一旦调用OnMouseClick,您就可以将该布尔值设置为 false,允许在拖动完成后进行鼠标单击。

例:

public class MyUserControl : UserControl
{
    bool dragging = false;
    // ...
    protected override void OnMouseClick(MouseEventArgs e)
    {
        if (dragging)
        {
            // We've finished dragging, don't call MouseClick
            dragging = false;
            return;
        }
        // Not dragging, fire MouseClick
        base.OnMouseClick(e);
    }
}

尝试在拖动时设置一个等于 true 的拖动布尔值,然后在短暂的计时器运行后将其关闭。这样,您可以在 MouseClick 事件中添加 if 语句,以查看它最近是否被拖动过。