Windows窗体选项卡事件

本文关键字:事件 选项 窗体 Windows | 更新日期: 2023-09-27 17:49:33

我有一个windows窗体应用程序,在其中我创建了两个选项卡页。在一个标签页我有一个按钮发送电子邮件通知。在选项卡离开事件中,我有一些代码来执行其他一些操作。当我点击这个按钮发送电子邮件。首先,它触发标签页离开事件,因为按钮包含button1.enabled=false;如下所示,第一行

 private void btnTestEmail_Click(object sender, EventArgs e)
        {
            btnTestEmail.Enabled = false;
            bool sent = Support.SendEmail("Test Email", "This is a test email, Please ignore.", null);
--
}

但是当我删除btnTestEmail。Enabled = false;代码中没有触发标签页离开事件。它触发选项卡页的离开事件的原因是什么?因为这是非常奇怪的行为。因为我不想触发标签页的任何事件。

Windows窗体选项卡事件

btnTestEmail.Enabled更改为false将更改ActiveControl,从而触发Leave事件。

根据MSDN:

当您使用键盘(TAB, SHIFT+TAB, and)改变焦点时等等),通过调用Select或SelectNextControl方法,或by设置ContainerControl。ActiveControl属性到当前窗体中,焦点事件按以下顺序发生:

  1. 输入

  2. GotFocus

  3. 离开
  4. 验证

  5. 验证

  6. LostFocus

你能做的:

为了消除这种行为,我将取消订阅Leave事件,并在将Enabled属性设置为false后重新订阅它。

:

this.tabPage1.Leave -= new System.EventHandler(this.tabPage1_Leave);
btnTestEmail.Enabled = false;
this.tabPage1.Leave += new System.EventHandler(this.tabPage1_Leave);

问题是,如果控件不是活动控件,则会触发Leave事件。如果您单击按钮,TabPage将从活动变为非活动,因为按钮现在是活动控件。