1

我有一个以三个 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;
        }
    }
}
4

1 回答 1

1

在没有看到任何代码或不知道这是什么类型的项目的情况下,这是 winforms、WPF、ASP.NET 等。很难给出明确的答案,我将假设这是 WinForms

我不确定你是否可以。以下是来自 MSDN 的引用:

“在显示选项卡页之前不会创建 TabPage 中包含的控件,并且在显示选项卡页之前不会激活这些控件中的任何数据绑定。”

但是,不是让更新代码直接从控件获取值,也许您可​​以创建一个可以保存用于填充控件的数据的类,然后当调用更新代码时,它会向类询问值和类检查控件是否已加载,否则它会从数据中获取值。

于 2012-08-23T14:04:24.160 回答