如何防止WinForms失去焦点?

时间:2011-07-14 12:54:53

标签: c# .net forms focus

如何防止我的“关于表格”(没有输入框,仅限确定按钮)失去焦点,强制用户点击“确定”?我尝试了验证和ErrorProvider。我还试图像这样委托Show,Activate和Focus:

AboutForm myAboutForm = new AboutForm();
myAboutForm.Deactivate += delegate { myAboutForm.Show(); myAboutForm.Activate(); };
myAboutForm.Show();

但没有任何作用。

5 个答案:

答案 0 :(得分:10)

让您的表格成为Modal窗口对话框。

AboutForm myAboutForm = new AboutForm();
myAboutForm.ShowDialog();

来自MSDN - ShowDialog

  

将表单显示为模式对话框。

答案 1 :(得分:2)

您需要将中止表格定义为modal。模态窗口是(每Wikipedia):

  

在用户界面设计中,模态窗口是子窗口   要求用户在返回操作之前与其进行交互   父应用程序,从而阻止了工作流程   应用程序主窗口。模态窗口通常称为重窗口   或模态对话框,因为窗口通常用于显示对话框   框。

例如,

myAboutForm.ShowDialog();代替myAboutForm.Show();所以:

AboutForm myAboutForm = new AboutForm();
myAboutForm.ShowDialog();

MSDN on displaying modal and modeless windows

了解详情
  

必须先关闭或隐藏模态表单或对话框,然后才能使用   继续使用其他应用程序。

最后,根据MSDN,我不确定Deactivate是否按照您的想法运作:

  

当表单失去焦点而不再是活动表单时发生。

  

您可以使用此事件执行更新其他任务等任务   应用程序中的窗口,其中包含已停用表单中的数据。

答案 2 :(得分:2)

将表单显示为模式对话框:

myAboutForm.ShowDialog();

答案 3 :(得分:1)

在Windows上,桌面具有最高优先级。如果您的应用正在运行,则无法阻止用户访问桌面。但是,有一些技巧可以做到。您只需设置表单的最顶层属性,这样用户将始终在所有应用程序之上查看。 ShowDialog会将您的表单保留在您的应用程序之上。

答案 4 :(得分:0)

AboutForm myAboutForm = new AboutForm();
myAboutForm.ShowDialog();