1

3 つの TabPages で始まる TabControl があります。最初のタブには NumericUpDown (スピナー) があり、タブの数が表示され、ユーザーは最大 10 個のタブを追加できます。約 5 つまたは 6 つ以上追加すると、フォームの幅を超えてしまい、残りのタブには上部の左右の矢印でアクセスできます。右端まで移動してからスピナーを使用して 0 に戻ると (余分なタブをすべて削除し、最初の 3 つを残す)、スピナーを 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 に答える