MessageBox
で、.NET Compact Framework では MessageBox.Show() メソッドに owner を指定することができないのですが、メッセージボックス表示中に呼び出し元のフォームをタップすると呼び出し元のフォームが前面に出てしまい、メッセージボックスが背後に回ってしまうという困った動作をします。
考えた末「タップされたくなければ Disable にすればいいじゃない」という結論に達し、以下のようなメソッドを実装しました。
///
/// 指定したフォームの前に、指定したテキスト、ボタン、アイコ
/// ンおよび規定のボタンを表示するメッセージボックスを表示す
/// る。
///
///
///
/// キャプションは
/// する。
///
///
/// タップ操作によって、メッセージボックスが<i>owner</i>の
/// 背後にまわる場合があるので、メッセージボックスの表示中
/// は<i>owner</i>がユーザーとの対話に応答しないようにす
/// る。
///
///
///
/// メッセージボックスがその前に表示される
///
///
///
/// メッセージボックスに表示するテキスト。
///
///
/// メッセージボックスに表示されるボタンを指定する
///
///
///
/// メッセージボックスに表示されるアイコンを指定する
///
///
///
/// メッセージボックスの既定のボタンを指定する
///
///
///
public static DialogResult
MsgBox
(Form owner,
string message,
MessageBoxButtons button,
MessageBoxIcon icon,
MessageBoxDefaultButton defaultButton)
{
bool ownerEnabledSave = owner.Enabled;
owner.Enabled = false;
DialogResult result
= MessageBox.Show
(message, ApplicationInfo.Name, button, icon,
defaultButton);
owner.Enabled = ownerEnabledSave;
return result;
}
これを使うと、メッセージボックス表示中に owner が Disable になり、色が灰色になりますが、まあ、それはどーでもいいや、とゆーことにしました。