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;代码中没有触发标签页离开事件。它触发选项卡页的离开事件的原因是什么?因为这是非常奇怪的行为。因为我不想触发标签页的任何事件。
对
将btnTestEmail.Enabled
更改为false将更改ActiveControl
,从而触发Leave
事件。
根据MSDN:
当您使用键盘(TAB, SHIFT+TAB, and)改变焦点时等等),通过调用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);
问题是,如果控件不是活动控件,则会触发Leave事件。如果您单击按钮,TabPage将从活动变为非活动,因为按钮现在是活动控件。