5

ユーザーがメッセージボックスの確認を拒否できないように、メッセージボックスをユーザーに表示したい。メッセージボックスを確認するまで、ユーザーは画面内で他の操作を実行できないようにする必要があります。

これは Windows ベースの C# アプリケーションです。

主なことは、Windowsメッセージボックスを使用していても. 画面の後ろに隠れていることもあります。しかし、私の場合、メッセージボックスが表示されるたびに一番上に表示されるようにします。

メッセージボックスを上書きする他のサードパーティアプリケーションを使用しています。これを克服したい。

これを行う方法...

4

4 に答える 4

4

この記事を見てください

Windows フォーム C# での MessageBox.Show の例

編集:

フォームの topmost プロパティを使用して、特定のアプリケーションのすべてのウィンドウの上にフォームを作成することもできます。

方法: Windows フォームを最前面に保持する

フォームをモーダル ダイアログとして表示するには、ShowDialogメソッドを呼び出します。

Form frmAbout = new Form();
frmAbout.ShowDialog();
于 2009-09-08T04:27:13.620 に答える
4

独自のフォームを作成し、モーダルにし、z オーダーを変更して常に最前面に表示し、すべてのキーストロークとマウス クリックをキャプチャする必要があります。

常に上: http://www.codeguru.com/cpp/wd/dislog/article.php/c1857

于 2009-09-08T04:29:46.720 に答える
2

の標準的な実装が必要な処理をMessageBox行わない場合は、独自のフォームを作成してShowDialog()メソッドを使用する必要があります。

于 2009-09-08T04:25:23.680 に答える
1

メッセージボックスが別のスレッドに表示されているようです。メインUIスレッドでMessageBox.Showを呼び出すことを確認する必要があります。以下は、これを実現する方法を示すコードスニペットです。

public class FooForm: Form
{

   //This is just a button click handler that calls ShowMessage from another thread.
   private void ButtonShowMessage_Click(object sender,EventArgs e)
   {
     //Use this to see that you can't interact with FooForm before closing the messagebox.
     ThreadPool.QueueUserWorkItem(delegate{ ShowMessage("Hello World!");});

     //Use this (uncomment) to see that you can interact with FooForm even though there is a messagebox.
     //ThreadPool.QueueUserWorkItem(delegate{ MessageBox.Show("Hello World!");});
   }

   private void ShowMessage(string message)
   {
     if( InvokeRequire)
     {
       BeginInvoke(new MethodInvoker( () => MessageBox.Show(message))); 
     }
     else
     {
       MessageBox.Show(message);
     }
   }    
} 

複数のUIスレッドがあり、そのうちの1つがメッセージボックスをポップする場合、そのメッセージボックスをUI全体でモーダルにするシナリオはないと想定しています。これはもっと複雑なシナリオです。

于 2009-09-08T05:51:45.067 に答える