独自のオプション ウィンドウを備えた小さなアプリを作成しようとしています。ウィンドウを起動しようとすると、新しいフォームにフォーカスを設定できないようです。これは MDI フォームではなく、ユーザーがメニューからオプションを選択したときに作成する単なる新しいフォームです。Form.Show は false を返すことに注意してください。これは、新しいフォームがフォーカスを受けていないことを意味します。
フォームをロードするために複数の方法を試しましたが、すべて失敗しました:
通話フォームから:
ServerForm SF = new ServerForm(ref DataLoader, false);
SF.Show();
SF.Focus();
// Fails
フォーム自体の内部:
this.Show();
this.BringToFront();
this.Activate();
this.TopMost = true;
// Fails
フォームを選択可能に設定:
this.SetStyle(System.Windows.Forms.ControlStyles.Selectable, true);
...
ServerForm SF = new ServerForm(ref DataLoader, false);
SF.Show();
SF.Focus();
// Fails
古い API の使用:
[System.Runtime.InteropServices.DllImport("user32.dll")]
private static extern int ShowWindow(IntPtr handle, int nCmdShow);
ServerForm SF = new ServerForm(ref DataLoader, false);
ShowWindow(SF.Handle, 3);
SF.Show();
SF.Focus();
// Fails
親を渡す
ServerForm SF = new ServerForm(ref DataLoader, false);
SF.Show(this);
SF.Focus();
// Fails
これらのすべてのケースで、フォームは表示されますが、生成されたフォームはまだ新しいフォームにフォーカスがあります。これは、新しいフォームを作成する前に古いフォームを無効にしても発生します。
助言がありますか?