モードレスメッセージボックスを作成するにはどうすればよいでしょうか。独自のWindowsフォームクラスを作成して使用する必要がありますか?もしそうなら、警告アイコンを追加し(自分の画像を挿入するのではなく)、テキストの量に基づいてサイズを変更する簡単な方法はありますか?
フォームを作成し、Show()
を使用してモードレスで表示する必要があります。 MessageBox.Show(...)
ghibozの例に見られるようにモーダルで動作しました。 「メッセージの説明」は、ユーザーがボタンを押すまで表示されます。
MessageBox.Show(...)
を使用すると、メッセージボックスが閉じられるとすぐに結果が得られます。モードレスメッセージボックスでは、ユーザーが最終的にメッセージボックスで何かを選択したときに反応するイベントなどのメカニズムがコードに必要になります。
コードがバックグラウンドで実行されている間だけ表示されるメッセージボックスが必要な場合(ボックスはまだモーダルであり、[OK]をクリックするまでユーザーが他のウィンドウを使用できないようにします)、いつでも独自のスレッドでメッセージボックスを開始できます元のスレッドで行ったことを続けます。
// Do stuff before.
// Start the message box -thread:
new Thread(new ThreadStart(delegate
{
MessageBox.Show
(
"Hey user, stuff runs in the background!",
"Message",
MessageBoxButtons.OK,
MessageBoxIcon.Warning
);
})).Start();
// Continue doing stuff while the message box is visible to the user.
// The message box thread will end itself when the user clicks OK.
コードを書く以外に、コンストラクターで次のことを行う小さなフォームを作成できます。
SystemIcons.Application
SystemIcons.Asterix
SystemIcons.Error
SystemIcons.Exclamation
SystemIcons.Hand
SystemIcons.Information
SystemIcons.Question
SystemIcons.Shield
SystemIcons.Warning
SystemIcons.WinLogo
本当に必要な場合は、[OK]ボタンが押されたときに発生するイベントを聞くことができます。
SystemIcons
を使用して、標準のシステム警告アイコンを使用できます。
フォームを使用してshowDialog()を呼び出す必要があります
そしてアイコンの使用のために
MessageBoxIcon.Warning
//コメント無し
object sync = new object();
ManualResetEvent Wait = new ManualResetEvent();
//you should create a place holder named MessageData for Message Data.
List<MessageData> Messages = new List<MessageData>();
internal void ShowMessage(string Test, string Title, ....)
{
MessageData MSG = new MessageData(Test, Title);
Wait.Set();
lock(sync) Messages.Add(MSG);
}
// another thread should run here.
void Private_Show()
{
while(true)
{
while(Messsages.Count != 0)
{
MessageData md;
lock(sync)
{
md = List[0];
List.RemoveAt(0);
}
MessageBox.Show(md.Text, md.Title, md....);
}
Wait.WaitOne();
}
}
並行メッセージボックスには、より多くのスレッドとより多くのコード(書く時間がありません)が必要です。