【发布时间】:2009-05-12 17:40:41
【问题描述】:
我一直在尝试编写一个带有自己的选项窗口的小应用程序。当我尝试启动窗口时,我似乎永远无法将注意力集中在新表单上。这不是 mdi 表单,而只是我在用户从菜单中选择选项时创建的新表单。需要注意的是,Form.Show 是 return 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
在所有这些情况下,表单都会显示,但生成的表单仍将焦点放在新表单上。即使我在创建新表单之前禁用旧表单也会发生这种情况。
有什么建议吗?
【问题讨论】: