在MouseDown上显示MessageBox会占用MouseUp事件

时间:2012-12-02 15:35:52

标签: c# wpf mouseevent

我正在开发一个WPF应用程序,我处理了一个最终显示的鼠标按下事件 MessageBox ..但是在mouseDown上出现MessageBox之后,它会占用控件的相应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消息。

3 个答案:

答案 0 :(得分: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
}

<强>截图

Calling a MessageBox in a different thread to avoid interrupting the main user interface thread

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

答案 1 :(得分: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有关的问题。希望这有帮助。

答案 2 :(得分: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);

        }

    }