如何防止WinForms失去焦点?

4
如何防止我的“关于窗体”(没有输入框,只有确定按钮)失去焦点,强制用户点击“确定”?我尝试了验证和错误提供程序。我还尝试委托Show、Activate和Focus,代码如下:
AboutForm myAboutForm = new AboutForm();
myAboutForm.Deactivate += delegate { myAboutForm.Show(); myAboutForm.Activate(); };
myAboutForm.Show();

但是什么都没用。
5个回答

10

将你的关于表单制作成一个模态窗口对话框

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

来自 MSDN - ShowDialog:

将窗体显示为模态对话框。


3
您需要将中止表单定义为模态窗口。根据维基百科的定义,模态窗口是指:

在用户界面设计中,模态窗口是一个子窗口,要求用户与其交互后才能返回操作父应用程序,从而防止在应用程序主窗口上进行工作流程。模态窗口通常被称为重窗口或模态对话框,因为该窗口经常用于显示对话框。

例如:

myAboutForm.ShowDialog(); 代替 myAboutForm.Show(); 这样:

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

阅读更多:MSDN上有关显示模态和非模态窗口的内容

模态窗体或对话框必须在您继续使用应用程序的其他部分之前关闭或隐藏。

最后,我不确定Deactivate是否按您所想的方式工作,根据MSDN的说法:

当窗体失去焦点并且不再是活动窗体时发生。

以及

您可以使用此事件执行诸如使用来自已停用表单的数据更新应用程序中的另一个窗口等任务。


3
以模态对话框的形式显示表单: myAboutForm.ShowDialog();

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

1
在Windows系统中,桌面是最高优先级的。如果您的应用程序正在运行,您无法阻止用户访问桌面。但是,有一些技巧可以实现。您只需设置窗体的“始终置顶”属性,这样用户将始终看到它在所有应用程序之上。ShowDialog方法将使您的窗体保持在应用程序的顶部。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接