C# TabPage单击当前选定选项卡时验证事件触发

C# TabPage单击当前选定选项卡时验证事件触发,c#,winforms,tabcontrol,tabpage,C#,Winforms,Tabcontrol,Tabpage,我正在做的事情正如在 事情进展顺利。但是,如果当前已选中tabpage1,并且用户单击tabpage1本身,则会发生tabpage1的验证事件。稍后,当用户单击tabpage2时,tabpage1的验证事件不会触发 如果我在tabpage1的验证事件中执行e.Cancel,则在上述情况下,当用户错误地单击tabpage1并选择了tabpage1时,它将提示用户“您想留在当前选项卡上保存数据还是从当前选项卡移动?”。如果用户单击停留,但不做任何更改。然后,当他正确单击tabpage2时,tabpa

我正在做的事情正如在

事情进展顺利。但是,如果当前已选中tabpage1,并且用户单击tabpage1本身,则会发生tabpage1的验证事件。稍后,当用户单击tabpage2时,tabpage1的验证事件不会触发

如果我在tabpage1的验证事件中执行
e.Cancel
,则在上述情况下,当用户错误地单击tabpage1并选择了tabpage1时,它将提示用户“您想留在当前选项卡上保存数据还是从当前选项卡移动?”。如果用户单击
停留
,但不做任何更改。然后,当他正确单击tabpage2时,tabpage1的验证事件不会触发


我已经上传了示例应用程序。您可以运行并查看行为以正确理解问题

这是验证应该如何运行的关键,只是与tabpages不匹配

您可以使用Selecting/Selected事件并自己编写更多的逻辑。或者放弃标签页,或者放弃它们需要单独验证的想法

改用

像这样使用它:

tabControl1.Selecting += tabControl1_Selecting;

private void tabControl1_Selecting(object sender, TabControlCancelEventArgs e)
{
    e.Cancel = !(can switch tab);
}

不需要留下任何想法或标签页。选择事件就可以了。顺便说一句,我取消选择事件将工作得很好。感谢@Jens GranlundThanks提供的链接。我将使用取消选择事件。