C#TabControl-是否可以;禁用";个人标签页?
是否有可能禁用选项卡控件的一个(或多个)选项卡?在某个时刻,我需要让用户停留在活动选项卡上,并阻止他离开。。。我知道我可以禁用整个TabControl组件,但这也会禁用活动tab上的所有组件 我还尝试使用TabControl的选择方法:C#TabControl-是否可以;禁用";个人标签页?,c#,winforms,tabcontrol,C#,Winforms,Tabcontrol,是否有可能禁用选项卡控件的一个(或多个)选项卡?在某个时刻,我需要让用户停留在活动选项卡上,并阻止他离开。。。我知道我可以禁用整个TabControl组件,但这也会禁用活动tab上的所有组件 我还尝试使用TabControl的选择方法: private void TabControl_Selecting(object sender, TabControlCancelEventArgs e) { e.Cancel = PreventTabSwitch; } 这样做可
private void TabControl_Selecting(object sender, TabControlCancelEventArgs e) {
e.Cancel = PreventTabSwitch;
}
这样做可以防止用户切换(如果PreventTabSwitch==true),但由于所有选项卡看起来都处于活动状态,只是没有反应,所以很混乱
没有为单个选项卡页启用属性,所以我不知道还能做什么
非常感谢您提前提供的所有提示。IIRC,这是防止用户切换选项卡的唯一方法
我想你是在阻止他们离开,因为表单上的验证失败了?使用ErrorProvider组件将提供某种视觉提示,提示他们在切换选项卡之前需要做些什么。我曾经有过类似的需求(我希望活动选项卡具有不同的背景颜色和其他内容)并最终创建了继承自
TabControl
&TabPage
的新控件,我使用OwnerDraw
来改变外观
您所做的是正确的方法,但它确实表明另一种选择是根据需要隐藏/显示页面。- TabControl-在上禁用/启用选项卡页
- MSDN搜索“tabcontrol禁用的tabpage”位于
private int currentTab = 0;
private void frmOneTimeEntry_Load(object sender, EventArgs e)
{
tabMenu.Selecting += new TabControlCancelEventHandler(tabMenu_Selecting);
}
private void tabMenu_Selecting(object sender, TabControlCancelEventArgs e)
{
tabMenu.SelectTab(currentTab);
}
private void btnNextStep_Click(object sender, EventArgs e)
{
switch(tabMenu.SelectedIndex)
{
case 0:
//if conditions met GoTo
case 2:
//if conditions met GoTo
case n:
//if conditions met GoTo
{
CanLeaveTab:
currentTab++;
tabMenu.SelectTab(tabMenu.SelectedIndex + 1);
if (tabMenu.SelectedIndex == 3)
btnNextStep.Enabled = false;
if (btnBackStep.Enabled == false)
btnBackStep.Enabled = true;
CannotLeaveTab:
;
}
private void btnBackStep_Click(object sender, EventArgs e)
{
currentTab--;
tabMenu.SelectTab(tabMenu.SelectedIndex - 1);
if (tabMenu.SelectedIndex == 0)
btnBackStep.Enabled = false;
if (btnNextStep.Enabled == false)
btnNextStep.Enabled = true;
}
如果要取消对选项卡的更改,可以使用取消选择事件。在这里,您可以通过将提供的TabControlCancelEventArgs的属性cancel设置为true来取消更改。您始终可以将其与将TabControls字体的颜色更改为灰色相结合,使其看起来有点禁用。即使假设您使用了FlatTabControl并添加了自定义每页“启用”属性,你仍然会迷惑用户。如果您确实想这样做,可以使用Barry建议的ErrorProvider组件,或者在用户尝试切换选项卡时弹出一个消息框。制表符本质上是混乱和禁用的制表符,更是如此。并且可能会在某些用户中引起“UI小部件愤怒”。请注意隐藏方法
TabPage.Visible
有一个bug,它没有隐藏tab页-我读到它时有一个小想法,我遇到了隐藏TabPage的奇怪问题。但仍可以将对页面的引用存储在其他位置,并根据需要删除/插入。