奇妙に聞こえるかもしれませんが、これは私の趣味のためです。(カスタム)メッセージボックスに、理想的にはコードをブロックするYesNoボタンが表示されるようにしたいと思います。ただし、親フォームをクリックして、メッセージ ボックス ボタンを特にクリックしなくてもメッセージ ボックスを閉じることができるようにする必要があります (メッセージ ボックスで [いいえ] をクリックするのと同じです)。
このようなもの:
void Foo()
{
CustomMsgBox.Show("do you really wanna delete?", CustomMsgBox.Buttons.YesNo);
//block the code here, but user should be able to click on form, so that its equivalent to have clicked No;
//if clicked No, return;
//delete.
}
だから私が考えた解決策は、カスタムメッセージボックスを非モーダルにすることでした-ユーザーがフォームをクリックできるようにしますが、コードをブロックすることはできません..どうすればできますか?
次のようになります。
void Foo()
{
NonModalMsgBox.Show("do you really wanna delete?", CustomMsgBox.Buttons.YesNo);
//block thread till user clicks on form or messagebox buttons.
//unblock when user clicks.
//if No, return;
//delete.
}
編集:これは標準的な慣行ではないことを知っており、非モーダル フォームはブロックされませんが、モーダル フォームはブロックされます。したがって、モーダル フォームまたは非モーダル フォームの動作に満足することはお勧めしません。私の質問は、Windows フォームでContextMenuの動作をシミュレートする方法があるということです。