C# 表单激活和停用事件

标签 c# winforms events

我有两个窗体,主窗体和子窗体。当 mainForm 失去焦点时,我希望 subForm 消失,然后在 mainForm 重新获得焦点时重新出现。我在 mainForm 上使用 Activated 和 Deactivate 事件来跟踪 mainForm 是否有焦点。当 Activated 被触发时,我执行 subForm.Show() 和 Deactivate 相反的操作。我遇到的问题是,当 subForm 获得焦点时,mainForm 消失,因为我不知道如何以编程方式说“当 mainForm 的 Deactivate 事件触发时,让 subForm 消失,除非是因为 subForm 获得焦点。我正在做的事情的全部意义是当 mainForm 失去焦点时使两个窗口消失,因为用户单击另一个应用程序或使用 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.
    }
}

最佳答案

works on my machine .

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();
        }
    }
}

关于C# 表单激活和停用事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13042166/

相关文章:

C# 停止 TCP 文件传输

c# - 在 C# 和 C++ 之间共享变量

c# - 列表框更新#2

c# - WPF 是否可以在 Windows 锁定屏幕顶部显示dialog()?

c# - 销毁对象时自定义事件是否需要设置为null?

c# - Xamarin 中的大量内存使用

c# - 第一个敏捷项目——我应该先写什么?

iphone - 订阅 iOS 4.0 中的 WebCal URL

c# - C# 中的事件处理程序应该引发异常吗?

c# - 获取图像方向并根据方向旋转