JYe*_*ton 32 c# .net-3.5 winforms
我目前确定通过该SelectedIndexChanged事件点击了tabcontrol的哪个页面.
我想在选定的索引实际更改之前检测,以进行验证.例如,用户单击他们正在查看的标签页以外的标签页.如果表单数据未保存,则会显示一个对话框,询问是否可以继续.如果用户单击否,则用户应保留在当前选项卡上.
目前我必须记住上一个标签页并在回答"否"后切换回它.
我考虑过MouseDown(和各种计算逻辑),但我怀疑这是最好的方法.
Che*_*hen 43
在form_load中将这样的事件添加到tabControl:
tabControl1.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;
}
Run Code Online (Sandbox Code Playgroud)
它TabControl有一个TabPages集合,每个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;
}
}
Run Code Online (Sandbox Code Playgroud)
我实际上已经尝试了所有的事件,包括这里的建议,并且没有一个提到的事件在恰当的时间发生,实际上陷阱从标签移动.
甚至标签页验证事件在进入选项卡时都会触发而不是离开它 - 无论是那个还是我的机器或.NET 4都有一些特殊的东西.另一方面,在.NET 4中有一个取消选择事件,它会触发适合我的目的.
private void tab_Deselecting(object sender, TabControlCancelEventArgs e)
{
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
60690 次 |
| 最近记录: |