5

我想做一个测验,通过问题,请记住,在使用问题 1 时,其他问题被禁用。单击下一步按钮后,它应直接更改为 Q2,禁用 Q1,依此类推。

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

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

4

4 回答 4

4

另一个解决方案(我认为最简单的):

  • 使用全局变量(此处为 currentSelectedTab)

  • 使用事件选择

      // currentSelectedTab is the Only Tab I want enabled.
      TabPage currentSelectedTab = tabWizardControl.TabPages[0];
    
      private void tabWizardControl_Selecting(object sender, TabControlCancelEventArgs e)
      {
          int selectedTab = tabWizardControl.SelectedIndex;
          //Disable the tab selection
          if (currentSelectedTab != selectedTab)
          {
              //If selected tab is different than the current one, re-select the current tab.
              //This disables the navigation using the tab selection.
              tabWizardControl.SelectTab(currentSelectedTab);
          }
      }
    
于 2014-02-21T13:55:23.260 回答
4

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

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

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

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

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

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

于 2015-08-11T06:18:24.750 回答
3

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

tabControl.TabPages[0]

因此,假设您从选项卡 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;

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

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;

免责声明:这未经测试,但应该是这样的。

您说您收到关于不包含已启用定义的对象的错误 - 我的代码将每个标签页类型转换为 TabPage。但是我还没有测试过。

于 2013-04-18T06:45:12.733 回答
0

我遵循了这种方式:

i) 具有 currentIndex 值的全局变量。

ii) 将 SelectedIndexChanged 事件处理程序添加到 tabControl。

iii) 在 SelectedIndexChanged 处理程序中,将索引设置回 currentIndex。

iv) 在 NextButton Click 事件中更改 currentIndex

这可能有效:

   currentIndex = 0; //global initial setting

   tabControl1.SelectedIndexChanged += new EventHandler(tabControl1_SelectedIndexChanged);

   void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
   {
       tabControl1.SelectedIndex = currentIndex;
       return;
   }

   private void nextButton_Click(object sender, EventArgs e)
   {
       currentIndex += 1;

       if (currentIndex >= tabControl1.TabPages.Count)
       {
           currentIndex = 0;
       }

       foreach (TabPage pg in tabControl1.TabPages)
       {
           pg.Enabled = false;
       }

       tabControl1.TabPages[currentIndex].Enabled = true;
       tabControl1.SelectedIndex = currentIndex;
   }
于 2013-04-18T08:20:54.107 回答