如何禁用选项卡,以便用户无法更改它?

Oli*_*ver 1 c# tabs winforms

我想进行一个测验,遍历所有问题,同时请记住,在使用问题1时,其他的则被禁用。单击“下一步”按钮后,它应直接更改为Q2,禁用Q1,依此类推。

如何使它禁用上一个选项卡,并在单击“下一步”按钮后使当前选项卡保持启用状态?

如何保持其他选项卡禁用?

小智 6

如前所述,可以通过索引选择选项卡。

和以前一样,让我们​​禁用所有其他选项卡:

foreach(TabPage tab in tabControl.TabPages)
{
    tab.Enabled = false;
}
(tabControl.TabPages[0] as TabPage).Enabled = true;
Run Code Online (Sandbox Code Playgroud)

现在,防止导航到任何其他选项卡的方法很简单:

private void tabControl_Selecting(object sender, TabControlCancelEventArgs e)
    {
        if (!e.TabPage.Enabled)
        {
            e.Cancel = true;
        }
    }
Run Code Online (Sandbox Code Playgroud)

唯一的缺点是它们看起来是可选的,这意味着它们不会变灰。如果您希望该外观也显示为不可用,则您必须自己执行此操作。


Jef*_*eff 5

可以通过其索引访问选项卡,如下所示:

tabControl.TabPages[0]
Run Code Online (Sandbox Code Playgroud)

因此,假设您要开始使用选项卡1(索引= 0),则要禁用所有其他选项卡。

// This can be done manually in the designer as well.
foreach(TabPage tab in tabControl.TabPages)
{
    tab.Enabled = false;
}
(tabControl.TabPages[0] as TabPage).Enabled = true;
Run Code Online (Sandbox Code Playgroud)

现在,当您按下“下一步”按钮时,您要禁用当前选项卡,启用下一个选项卡,然后转到下一个选项卡。但是请记住检查选项卡是否存在!

if(tabControl.TabCount - 1 == tabControl.SelectedIndex)
  return; // No more tabs to show!

tabControl.SelectedTab.Enabled = false;
var nextTab = tabControl.TabPages[tabControl.SelectedIndex+1] as TabPage;
nextTab.Enabled = true;
tabControl.SelectedTab = nextTab;
Run Code Online (Sandbox Code Playgroud)

免责声明:这未经测试,但应该遵循这些原则。

您说您遇到有关对象的错误,该对象不包含Enabled的定义-我的代码将每个选项卡页面转换为一个TabPage。但是我还没有测试。

  • 我主张将其删除为已接受的答案,因为它显然不能解决问题并且它完全不起作用,完全不正确并且有点侮辱它被提议为“类似的东西”,尽管它没有经过测试或甚至查阅了文档(它说这是错误的)。 (2认同)