Windows窗体tabpage事件

时间:2014-03-11 11:12:09

标签: c# winforms button tabpage

我有一个Windows窗体应用程序,其中我创建了两个标签页。在其中一个标签页中,我有一个发送电子邮件通知的按钮。 在tabpage leave事件中,我有一些代码来执行其他一些操作。 当我点击此按钮发送电子邮件。首先它触发tabpage leave事件,因为它按钮包含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时;代码它没有触发tabpage离开事件。 可能是它触发标签页的离开事件的原因。因为这是一种奇怪的奇怪行为。因为我不想触发标签页的任何事件。

此致

2 个答案:

答案 0 :(得分:0)

问题是,如果控件不是活动控件,则会触发Leave事件。如果单击按钮,TabPage会从活动更改为非活动状态,因为Button现在处于活动控件。

答案 1 :(得分:0)

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

根据MSDN

  

使用键盘更改焦点时(TAB,SHIFT + TAB和   通过调用Select或SelectNextControl方法,或by   将ContainerControl.ActiveControl属性设置为当前   表单,焦点事件按以下顺序发生:

     
      
  1. 输入

  2.   
  3. 的GotFocus

  4.   
  5. 离开

  6.   
  7. 验证

  8.   
  9. 验证

  10.   
  11. 引发LostFocus

  12.   

你能做什么:

我要做的是消除此行为,取消订阅Leave事件并在将Enabled属性设置为false后重新订阅它。

像这样:

this.tabPage1.Leave -= new System.EventHandler(this.tabPage1_Leave);

btnTestEmail.Enabled = false;

this.tabPage1.Leave += new System.EventHandler(this.tabPage1_Leave);