我有一个标签控件和3个标签页。 (C#)
如果我在选项卡2中,并编辑文本框值 然后单击选项卡3,我需要验证文本框中的内容。 如果正确我应该允许切换到标签3否则应该保留在标签2中它自己 我该如何实现这一目标?
我正在处理tabpage2的“离开”事件, 我验证那里的文本框值,如果发现无效 我设置为tabcontrol.Selectedtab = tabpage2;这样做 验证但切换到新标签!我怎么能限制导航。
我是C#的新手,所以我可能正在处理错误的事件!
以下是相关代码:
private void tabpage2_Leave(object sender, EventArgs e)
{
if (Validatetabpage2() == -1)
{
this.tabcontrol.SelectedTab =this.tabpage2;
}
}
答案 0 :(得分:1)
您可以使用TabControl选择事件取消切换页面。在事件中将e.Cancel设置为true会阻止tabcontrol选择其他选项卡。
private bool _cancelLeaving = false;
private void tabpage2_Leave(object sender, EventArgs e)
{
_cancelLeaving = Validatetabpage2() == -1;
}
private void tabcontrol_Selecting(object sender, TabControlCancelEventArgs e)
{
e.Cancel = _cancelLeaving;
_cancelLeaving = false;
}
答案 1 :(得分:1)
虽然其他方法可能有效,但Validating事件是专门为此设计的。
这是它的工作原理。当选项卡控件的SelectedIndex更改时,将焦点设置为新选择的页面,以及CausesValidation = true。这可确保在用户尝试以任何方式离开选项卡时将调用Validating事件。
然后在页面特定的验证事件中进行常规验证,并在需要时取消。
您需要确保在Form Shown事件中设置初始选定的标签页(Form_Load不起作用),并连接标签页特定的验证事件。
以下是一个例子:
private void Form_Shown(object sender, System.EventArgs e)
{
// Focus on the first tab page
tabControl1.TabPages[0].Focus();
tabControl1.TabPages[0].CausesValidation = true;
tabControl1.TabPages[0].Validating += new CancelEventHandler(Page1_Validating);
tabControl1.TabPages[1].Validating += new CancelEventHandler(Page2_Validating);
}
void Page1_Validating(object sender, CancelEventArgs e)
{
if (textBox1.Text == "")
{
e.Cancel = true;
}
}
void Page2_Validating(object sender, CancelEventArgs e)
{
if (checkBox1.Checked == false)
{
e.Cancel = true;
}
}
private void tabControl1_SelectedIndexChanged(object sender, System.EventArgs e)
{
// Whenever the current tab page changes
tabControl1.TabPages[tabControl1.SelectedIndex].Focus();
tabControl1.TabPages[tabControl1.SelectedIndex].CausesValidation = true;
}