7

最終的にMessageBoxが表示されるマウスダウンイベントを処理するWPFアプリケーションで作業しています。しかし、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!");
}

仕事をする必要があります。ウィンドウタイトルの変更など、ユーザー入力を必要としない動作でこの動作が繰り返される場合、これは問題になる可能性がありますが、これはMessageBoxに関する問題であると100%確信しています。これがお役に立てば幸いです。

于 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 に答える