我有两个表单,主表单和子表单。当 mainForm 失去焦点时,我希望 subForm 消失,然后在 mainForm 重新获得焦点时重新出现。我在 mainForm 上使用 Activated 和 Deactivate 事件来跟踪 mainForm 是否具有焦点。当激活激活被触发时,我执行 subForm.Show() ,而停用则执行相反的操作。我遇到的问题是,当 subForm 获得焦点 mainForm 消失时,因为我不知道如何以编程方式说“当 mainForm 的 Deactivate 事件触发时使 subForm 消失,除非是因为 subForm 获得焦点。我正在做的事情的全部意义是让两个窗口在主窗体因用户单击另一个应用程序或使用 ALT+TAB 切换而失去焦点时消失。我不想留下子窗体。有什么方法可以检查 Deactive 是否触发因为属于该应用程序的另一种形式获得了关注,而不是其他应用程序?
class MainForm : Form
{
SubForm subForm = new SubForm();
private void mainForm_Activated(object sender, EventArgs e)
{
this.subForm.Show();
}
private void mainForm_Deactivate(object sender, EventArgs e)
{
this.subForm.Hide()
// I need some logic to make sure that it is only hidden
// when the mainForm loses focus because the user clicked
// some other application in the taskbar and not when the
// subForm itself gains the focus.
}
}
This 在我的机器上工作 http://www.codinghorror.com/blog/2007/03/the-works-on-my-machine-certification-program.html.
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
}
private Form2 _form2;
private void Form1_Load(object sender, EventArgs e) {
_form2 = new Form2();
_form2.Show();
HandleFocusEvents();
}
private void HandleFocusEvents() {
this.LostFocus += Form_LostFocus;
_form2.LostFocus += Form_LostFocus;
this.GotFocus += Form_GotFocus;
}
private void Form_LostFocus(object sender, EventArgs e) {
if (!_form2.ContainsFocus && !this.ContainsFocus) {
_form2.Hide();
}
}
private void Form_GotFocus(object sender, EventArgs e) {
if (!_form2.Visible) {
_form2.Show();
}
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)