【问题标题】:MouseDown before MouseMove is always guaranteed in C# WPF?在 C# WPF 中始终保证 MouseMove 之前的 MouseDown?
【发布时间】:2015-03-19 16:55:29
【问题描述】:
void MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    Mouse.Capture(this.eventSource);
    BlockA();
}

void MouseMove(object sender, MouseEventArgs e)
{
    if (e.LeftButton == MouseButtonState.Pressed)
        BlockB();
}

是否保证 BlockA() 总是在 BlockB() 之前运行?我在 WPF 下使用 C#。我遇到了一个奇怪的错误,它只发生在某些系统上。我怀疑事件顺序很重要,但我在 MSDN 上找不到任何关于此的文献。谢谢。

【问题讨论】:

    标签: c# wpf


    【解决方案1】:

    没有。如果在窗口外按下按钮,然后移到窗口内,它就会触发。你应该设置一个布尔值来知道你抓住了鼠标。

    【讨论】:

      【解决方案2】:

      Mouse.Capture(this.eventSource); 引发 MouseMove 事件。

      要始终在BlockB() 之前执行BlockA(),请将MouseLeftButtonDown() 更改为:

      void MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
      {
          BlockA();
          Mouse.Capture(this.eventSource);
      }
      

      【讨论】:

        【解决方案3】:

        我已经找到了 WinForm 的事件顺序,但我猜它在 WPF Mouse Event in Windows Form 中是一样的

        如果您想以正确的顺序处理鼠标点击事件,您需要知道在 Windows 窗体控件中引发点击事件的顺序。当按下和释放鼠标按钮(无论是哪个鼠标按钮)时,所有 Windows 窗体控件都以相同的顺序引发单击事件,除非在以下列表中针对各个控件进行了说明。以下列表显示了单击鼠标按钮引发的事件顺序: MouseDown 事件。
        点击事件。
        鼠标点击事件。
        MouseUp 事件。

        鼠标双击引发的事件顺序:
        MouseDown 事件。
        点击事件。
        鼠标点击事件。
        MouseUp 事件。
        MouseDown 事件。
        DoubleClick 事件。
        MouseDoubleClick 事件。
        MouseUp 事件。

        【讨论】:

        • 请在答案中写下摘要,否则您的帖子可能会被删除/转换为评论。
        • 问题是关于 WPF 而不是 WinForms
        【解决方案4】:

        您可以使用 PreviewMouseLeftButtonDown evet 代替 MouseLeftButtonDown 来满足您的要求。

        问候, 里亚杰·艾哈迈德一世

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多