C# Windows窗体选项卡页事件
我有一个windows窗体应用程序,我在其中创建了两个选项卡页。在其中一个选项卡页面中,我有一个发送电子邮件通知的按钮。 在tabpage leave事件中,我有一些代码来执行其他一些操作。 当我点击此按钮发送电子邮件时。首先触发tabpage leave事件,因为该按钮包含button1.enabled=false;在下面的第一行中C# Windows窗体选项卡页事件,c#,winforms,button,tabpage,C#,Winforms,Button,Tabpage,我有一个windows窗体应用程序,我在其中创建了两个选项卡页。在其中一个选项卡页面中,我有一个发送电子邮件通知的按钮。 在tabpage leave事件中,我有一些代码来执行其他一些操作。 当我点击此按钮发送电子邮件时。首先触发tabpage leave事件,因为该按钮包含button1.enabled=false;在下面的第一行中 private void btnTestEmail_Click(object sender, EventArgs e) {
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离开事件。
它触发tab page的leave事件的原因可能是什么。因为这是非常奇怪的行为。因为我不想触发任何标签页事件
关于问题是,如果控件不是活动控件,则会触发Leave事件。如果单击该按钮,选项卡页将从活动变为非活动,因为该按钮现在是活动控件。将
btnTestEmail.Enabled
更改为false将更改ActiveControl
,从而触发Leave
事件
根据:
使用键盘更改焦点时(TAB、SHIFT+TAB和
依此类推),通过调用Select或SelectNextControl方法,或
将ContainerControl.ActiveControl属性设置为当前
在窗体中,焦点事件按以下顺序发生:
Leave
事件,并在将Enabled
属性设置为false后重新订阅它
像这样:
this.tabPage1.Leave -= new System.EventHandler(this.tabPage1_Leave);
btnTestEmail.Enabled = false;
this.tabPage1.Leave += new System.EventHandler(this.tabPage1_Leave);
在该选项卡页面中是否有其他控件?是的,文本框下拉列表,按钮控件,复选框。在设置按钮启用之前,焦点移动到另一个控件。另一种方法通过将Enabled属性设置为false,可以强制Winforms查找另一个控件以将焦点提供给它。如果另一个控件不在选项卡页面上,那么Leave事件将触发。您需要将代码移动到一个单独的方法中,该方法既可以从Click调用,也可以从Leave事件处理程序调用。也许。