2

私は現在、Visual Studio 2012 の Forms に慣れる方法として小さなサイド プロジェクトに取り組んでいます。通常はコンソール アプリケーションのみを使用するからです。私の現在のレイアウトはタブを使用するように設計されており、ユーザーはこのアプリケーションに必要なタブの数を指定する必要があります。次に、いくつかの情報を入力すると、フォーマットされて、ユーザーが指定した場所にあるファイルに出力されます。質問に進みます。

重複するタブが存在しないようにするために、次を使用しています。

private void comboTabs_SelectedIndexChanged(object sender, EventArgs e)
{
    if (comboSkills.SelectedIndex == 0)
    {
        tabControl1.TabPages.Remove(tab8);
        tabControl1.TabPages.Remove(tab7);
        tabControl1.TabPages.Remove(tab6);
        tabControl1.TabPages.Remove(tab5);
        tabControl1.TabPages.Remove(tab4);
    }
    //repeat for Index 1, 2 and so on
}

常に最低 3 つのタブが存在するため、コンボ ボックスで最初に選択するとタブ 4 から 8 が削除されます。次の選択では同じことが行われますが、再び tab4 が追加されます。これは、次の選択に続きます。これをもっと便利にできる方法はありますか?

2 番目の質問です。各タブには、ユーザーが情報を選択するための一連のテキスト ボックスとコンボ ボックスがあります。私が抱えている問題は、ユーザーが選択したタブの数を特定し、それらのタブからのみ情報を取得する必要があることです。次の方法でタブの数を取得できることを認識しています。

int numberoftabs = tabControl1.TabCount;

しかし、その後、私は彼らからの情報を読み取ることができないようです. するつもりです

for (int i = 0; i < numberoftabs; i++)
{
    //get textbox text of tab i and so on            
}

これを行う方法はありますか?現在のレイアウトがとても気に入っているので、タブ レイアウトを使用したいと考えていました。違いがある場合、すべてのタブは同じレイアウトを持ち、タブ 1 テキスト ボックス 1 は textTab1Name、タブ 2 テキスト ボックス 2 は textTab2Name などの命名規則を共有します。

4

1 に答える 1

1

質問の最初の部分については、次のコードですべてのケースを処理できます。

var tabCount = 5 - comboBox1.SelectedIndex;

for (var i = 0; i < tabCount; i++)
{
    tabControl1.TabPages.RemoveAt(7-i);
}

2 番目の部分では、このメソッドを作成する必要があります。

private T GetControl<T>(string name) where T : Control
{
   return (T) this.Controls.Find(name, true).FirstOrDefault();
}

次に、テキスト取得ループを次のように記述できます。

for (int i = 0; i < numberoftabs; i++)  
{
    //get textbox text of tab i and so on            
    TextBox textBox1 = GetControl<TextBox>("textTab" + i + "Name");
    ...
    etc..
}
于 2013-02-06T10:25:53.757 に答える