我有一个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离开事件。 可能是它触发标签页的离开事件的原因。因为这是一种奇怪的奇怪行为。因为我不想触发标签页的任何事件。
此致
答案 0 :(得分:0)
问题是,如果控件不是活动控件,则会触发Leave事件。如果单击按钮,TabPage会从活动更改为非活动状态,因为Button现在处于活动控件。
答案 1 :(得分:0)
将btnTestEmail.Enabled
更改为false会更改ActiveControl
,从而触发Leave
事件。
根据MSDN:
使用键盘更改焦点时(TAB,SHIFT + TAB和 通过调用Select或SelectNextControl方法,或by 将ContainerControl.ActiveControl属性设置为当前 表单,焦点事件按以下顺序发生:
输入
的GotFocus
离开
验证
验证
- 醇>
引发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);