我目前通过SelectedIndexChanged
事件确定点击了tabcontrol的哪个页面。
我希望在所选索引实际更改之前检测,以进行验证。例如,用户单击他们正在查看的标签页以外的标签页。如果表单数据未保存,则会显示一个对话框,询问是否可以继续。如果用户单击否,则用户应保留在当前选项卡上。
目前我必须记住上一个标签页,并在回答“否”后切换回它。
我考虑过MouseDown(和各种计算逻辑),但我怀疑这是最好的方法。
答案 0 :(得分:39)
当form_load:
时,将这样的事件添加到tabControltabControl1.Selecting += new TabControlCancelEventHandler(tabControl1_Selecting);
void tabControl1_Selecting(object sender, TabControlCancelEventArgs e)
{
TabPage current = (sender as TabControl).SelectedTab;
// Validate the current page. To cancel the select, use:
e.Cancel = true;
}
答案 1 :(得分:7)
TabControl
有一个TabPages的集合,您可以在其中强制执行验证,例如:
public partial class MyForm : Form
{
public MyForm()
{
InitializeComponent();
foreach (var page in _tabControl.TabPages.Cast<TabPage>())
{
page.CausesValidation = true;
page.Validating += new CancelEventHandler(OnTabPageValidating);
}
}
void OnTabPageValidating(object sender, CancelEventArgs e)
{
TabPage page = sender as TabPage;
if (page == null)
return;
if (/* some validation fails */)
e.Cancel = true;
}
}
答案 2 :(得分:6)
我实际上已经尝试了所有的事件,包括这里的建议,并且在正确的时间没有任何提到的事件发生,实际上是从标签中移动。
甚至标签页验证事件在进入标签时都会触发而不是离开它 - 无论是那个还是那个我的机器或.NET 4上发生的特殊情况。另一方面,在.NET 4中有取消选举事件,在适当的时间为我的目的而开火。
private void tab_Deselecting(object sender, TabControlCancelEventArgs e)
{
}