■86791 / ) |
Re[1]: メッセージボックスが出ない |
□投稿者/ 魔界の仮面弁士 (1592回)-(2018/03/15(Thu) 23:20:07)
|
2018/03/15(Thu) 23:47:55 編集(投稿者)
■No86788 (mbox さん) に返信 > 期待通りにメッセージボックスを出すにはどうすればいいのでしょうか?
Form1 側に手を加えたくないのなら、 UserControl1 側で DoEvents を回すとか。
public UserControl1() { Application.DoEvents(); // ★ var ret1 = MessageBox.Show("1"); var ret2 = MessageBox.Show("2 ret1=" + ret1.ToString()); Controls.Add(new Button()); }
DoEvents を避けたいなら、MessageBoxOptions.ServiceNotification を指定するとか。
public UserControl1() { var ret1 = MessageBox.Show("1", "", MessageBoxButtons.OK, MessageBoxIcon.None, MessageBoxDefaultButton.Button1, MessageBoxOptions.ServiceNotification); var ret2 = MessageBox.Show("2 ret1=" + ret1.ToString(), "", MessageBoxButtons.OK, MessageBoxIcon.None, MessageBoxDefaultButton.Button1, MessageBoxOptions.ServiceNotification); Controls.Add(new Button()); }
ServiceNotification 指定が冗長なら、owner に NativeWindow でも渡しておくとか。
public UserControl1() { var nw = new NativeWindow(); // ★ var ret1 = MessageBox.Show(nw, "1"); var ret2 = MessageBox.Show(nw, "2 ret1=" + ret1.ToString()); Controls.Add(new Button()); }
MessageBox の引数を増やしたくなければ、自身のハンドルを先に作成しておくとか。
public UserControl1() { if(!IsHandleCreated) { CreateHandle(); } // ★ var ret1 = MessageBox.Show("1"); var ret2 = MessageBox.Show("2 ret1=" + ret1.ToString()); Controls.Add(new Button()); }
Form1 側を修正して良いのであれば、Dispose は後で行うようにするとか。
public Form1() { Controls.Add(new UserControl1()); Menu = new MainMenu(new MenuItem[] { new MenuItem("&File...", (sender, e) => { using(var control = Controls[0]) { Controls.Remove(control); Controls.Add(new UserControl1()); } })}); }
Dispose は先に行いたいなら、フォーカスを受け取れるダミーコントロールを残しておくとか。
public Form1() { Controls.Add(new UserControl1()); Controls.Add(new Control()); // ★ Menu = new MainMenu(new MenuItem[] { new MenuItem("&File...", (sender, e) => { var control = Controls[0]; Controls.Remove(control); control.Dispose(); Controls.Add(new UserControl1()); })}); }
ダミーコントロールを使いたくないなら、自フォームにフォーカスを戻すとか。
public Form1() { Controls.Add(new UserControl1()); Menu = new MainMenu(new MenuItem[] { new MenuItem("&File...", (sender, e) => { var control = Controls[0]; Controls.Remove(control); control.Dispose(); Focus(); // ★ Controls.Add(new UserControl1()); })}); }
|
|