1

私はしばらくこれをオンとオフに取り組んできましたが、基本的には、メッセージ ボックスを表示するために呼び出すクラスがあります。

メッセージ ボックスをモーダルにしようとしていますが、モーダルにするフォームを指定すると簡単に実行できます。

だから私のフォームはこのように宣言されています

public partial class MainForm : Form

そしてそれはこのようにインスタンス化されます

var mainForm = new MainForm();

だから私はこのようなメッセージボックスを開くメソッドを含むクラスを持っています

MainForm.ActiveForm.Invoke(new MethodInvoker(delegate
{
    MessageBox.Show(MainForm.ActiveForm, message, title, buttons, icon);
}));

これは正常に機能しますが、アクティブなフォームはフォームがアクティブな場合にのみ機能します.....

とにかく、これを回避する簡単な方法はありますか?

4

4 に答える 4

2

私は C# の初心者ですが、MessageBoxes は既にモーダルではありませんか? 独自のメッセージ ボックスを作成する場合はmessageboxform.ShowDialog();

于 2012-11-07T21:00:06.293 に答える
1

私にはかなりうまく機能する解決策がありますが、もっと洗練された解決策があるかどうかはわかりません。

だからMainForm.csで私は持っています

public static Form mainWindow { get; private set; }

次に、OnLoadメソッドで

Focus();
BringToFront();
mainWindow = MainForm.ActiveForm;

次に、私のメッセージボックスメソッドで:

MainForm.mainWindow.Invoke(new MethodInvoker(delegate
{
    MainForm.mainWindow.BringToFront();
    MessageBox.Show(MainForm.mainWindow, message, title, MessageBoxButtons.OK, icon);
}));

ここで何かが足りませんか?mainWindow = MainForm.ActiveFormに代わるより良い方法はありますか?

于 2012-11-09T14:16:28.083 に答える
1

その最初のパラメーターを使用したくない場合は、msdnに Winforms Messagebox用の Show メソッドがいくつかあります。

あなたはこれを試すかもしれません:

public static DialogResult Show(
    string text,
    string caption,
    MessageBoxButtons buttons,
    MessageBoxIcon icon,
    MessageBoxDefaultButton defaultButton
 )

だからあなたのために:

MessageBox.Show(message, title, buttons, icon);

編集:メインフォームから呼び出されているため、これは(最初のパラメーターなしで)モーダルに表示されるはずです。

于 2012-11-07T21:08:02.607 に答える