我想做一个测验,通过问题,记住在使用问题1时,其他人被禁用。单击“下一步”按钮后,它应直接更改为Q2,禁用Q1,依此类推。
如何禁用上一个标签并在点击“下一步”按钮后启用当前标签?
答案 0 :(得分:4)
可以通过索引访问Tab,如下所示:
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;
现在,当您按下“下一步”按钮时,您想要禁用当前选项卡,启用下一个选项卡,然后转到下一个选项卡。但请记住检查标签是否存在!
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;
免责声明:这未经过测试,但它应该是这些内容。
您声明对于不包含Enabled定义的对象有错误 - 我的代码将每个标签页都标记为TabPage。但是我没有测试过它。
答案 1 :(得分:3)
如前所述,可以通过索引选择标签。
和以前一样,让我们禁用所有其他标签:
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;
}
}
唯一的缺点是它们看似可选,这意味着它们不会变灰。如果您希望外观也不可用,则必须自己执行此操作。
答案 2 :(得分:2)
另一种解决方案(我认为最简单):
使用事件选择
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);
}
}
答案 3 :(得分: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;
}