我正在开发一个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消息。
答案 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
}
<强>截图强>
谢谢, 我希望你觉得这很有帮助:)
答案 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);
}
}