【问题标题】:how to `focus` to `tabpage` when close another `form`关闭另一个“表单”时如何“聚焦”到“标签页”
【发布时间】:2012-04-16 03:22:05
【问题描述】:

我有两种形式,form0form1form0 有一个包含三个页面的选项卡控件。 (tagpage1tabpage2tabpage3

form1 关闭时,我希望tabpage2 成为焦点。那么基本上,如何控制另一个表单的 tabcontrol 的 tabpage 的状态呢?

非常感谢任何帮助!

【问题讨论】:

    标签: c# winforms focus


    【解决方案1】:

    这就是事件处理程序的设计目的。您需要为表单的 FormClosed 事件编写一个处理程序。类似这样:

        private void button1_Click(object sender, EventArgs e) {
            var frm = new form1();
            frm.FormClosed += new FormClosedEventHandler(frm_FormClosed);
            frm.Show();
        }
    
        void frm_FormClosed(object sender, FormClosedEventArgs e) {
            tabControl1.SelectedTab = tabPage2;
        }
    

    或者更简洁:

            var frm = new form1();
            frm.FormClosed += delegate { tabControl1.SelectedTab = tabPage2; };
            frm.Show();
    

    最大的优势是这现在完全是 form0 的一个实现细节,在 form1 类中不需要特殊的代码或 form0 的知识。

    【讨论】:

    • 没用!在form1 中,我不会在form0 中调用tabControl
    • @DuyKhanh 此代码适用于 form0,而不适用于 form1。 Hans 在 button1_click 中提供的代码应该放在打开 form1 的地方。
    • 这是对答案的一个相当关键的评论:)
    【解决方案2】:

    在名称空间级别定义静态事件而不是形式 在关闭 Form1 时触发此事件并在 form2 上处理以选择所需选项卡

    【讨论】:

    • 避免像瘟疫这样的静态事件。他们不是明确取消订阅事件会导致内存泄漏。由于事件将永远保持对表单对象的引用。垃圾收集器无法修复它,您将事件设为静态。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-27
    • 1970-01-01
    相关资源
    最近更新 更多