7

我正在开发一个 WPF 应用程序,在该应用程序中我处理了一个最终显示 MessageBox 的鼠标按下事件。但是在 MessageBox 出现在 mouseDown 上之后,它吃掉了控件的相应 MouseUp 事件。

通过在 WPF 窗口中简单地处理 MouseDown 和 MouseUP 事件,可以轻松重现场景:-

private void Window_MouseDown(object sender, MouseButtonEventArgs e)
{
   MessageBox.show("Hello, Mouse down");
}

private void Window_MouseUP(object sender, MouseButtonEventArgs e)
{
   MessageBox.show("Hello, Mouse Up");
}

一旦消息框出现在 MouseDown 事件上,就永远不会显示 MouseUp 消息。

4

3 回答 3

2

初始化一个新的实例System.Threading.Thread来调用 ,MessageBox以便主用户界面线程不会被提示中断呢?

例子

private void Window_MouseDown(object sender, MouseEventArgs e)
{
    Thread mythread = new Thread(() => MessageBox.Show("Hello, Mouse Down")); //Initialize a new Thread to show our MessageBox within 
    mythread.Start(); //Start the thread
}

private void Window_MouseUP(object sender, MouseEventArgs e)
{
    Thread mythread = new Thread(() => MessageBox.Show("Hello, Mouse Up")); //Initialize a new Thread to show our MessageBox within 
    mythread.Start(); //Start the thread
}

截屏

在不同的线程中调用 MessageBox 以避免中断主用户界面线程

谢谢,
我希望你觉得这有帮助:)

于 2012-12-02T15:54:39.460 回答
0

正如您原始帖子的评论者所说,似乎这里发生的事情是用户的鼠标失去焦点以单击消息框,甚至只是为了显示它,所以鼠标无论如何都会“向上”移动 - 事件是从来没有打电话。如果您只想显示消息框,那么只需使用:

private void Window_MouseDown(object sender, MouseButtonEventArgs e)
{
   MessageBox.show("Hello, Mouse down");
   MessageBox.show("Hello, your mouse must be up because you've shifted focus!");
}

应该做的工作。如果更改窗口标题或任何不需要用户输入的操作重复此行为,那么这可能是一个问题,但我 100% 确定这只是 MessageBox 的一个问题。希望这有帮助。

于 2012-12-02T15:54:09.747 回答
0

@picrofo 解决方案也很好很简单,但我是这样做的

  DialogResult result;
 private void button1_MouseDown(object sender, MouseEventArgs e)
    {
        string message = "would you like to see mouse up event?";
        string caption = "event trick";
        MessageBoxButtons buttons = MessageBoxButtons.YesNo;

        result = MessageBox.Show(message, caption, buttons);
        textBox1.Text = result.ToString();
        if (result == System.Windows.Forms.DialogResult.Yes)
        {
            button1_MouseUp(sender, e);

        }

    }
于 2015-01-21T11:25:39.617 回答