我有一个以三个 TabPages 开头的 TabControl。在第一个选项卡上有一个 NumericUpDown(微调器),它显示选项卡的数量并允许用户添加最多 10 个额外的选项卡。一旦他们添加超过大约 5 或 6 个,它就会超出表单的宽度,其余的选项卡可以通过顶部的几个左/右箭头访问。当一直向右移动然后使用微调器返回到 0(删除所有额外的选项卡并保留最开始的三个)时,它会从窗格顶部删除所有选项卡,并且仅通过将微调器设置回 1它是否刷新并显示所有 4 个(从一开始的 3 个加上来自微调器的 1 个)。我尝试了几种组合,
Application.DoEvents()
this.Refresh()
this.Invalidate()
this.Update()
但似乎没有任何效果。任何人都可以提出它不更新/刷新的原因吗?
public partial class Form1 : Form
{
TabPage[] tabs;
public Form1()
{
InitializeComponent();
tabs = new TabPage[tabControl1.Controls.Count];
tabs[0] = tabPage1;
}
private void numericUpDown1_ValueChanged(object sender, EventArgs e)
{
int numTabs = tabControl1.Controls.Count;
decimal spinnerValue = numericUpDown1.Value;
if (numTabs < spinnerValue) //add a tab
{
TabPage[] newTabs = new TabPage[(int)spinnerValue];
for (int i = 0; i < numTabs; i++)
{
newTabs[i] = tabs[i];
}
TabPage tab = new TabPage("Tab " + numTabs);
newTabs[(int)spinnerValue-1] = tab;
tabControl1.Controls.Add(tab);
tabs = newTabs;
}
else //remove a tab
{
TabPage[] newTabs = new TabPage[(int)spinnerValue];
for (int i = 0; i < spinnerValue; i++)
{
newTabs[i] = tabs[i];
}
tabControl1.Controls.Remove(tabs[(int)spinnerValue]);
tabs = newTabs;
}
}
}