0

「e0」、「e1」、「e2」、「e3」という名前のいくつかの異なる TextBox 要素があります。いくつあるか知っているので、それぞれを手動で入力するのではなく、それらをループして値を取得できるようにしたいだけです。

私はこのようなことをしていると思いますが、要素にアクセスする方法がわかりません。

for(int i= 0; i < 4; ++i) {
    string name = "e" + i;
    // How do I use my newly formed textbox name to access the textbox 
    // element in winforms?
}
4

3 に答える 3

2

このようにコントロールの親を使用できます(すべてのコントロールをフォームに配置したと仮定して、これを使用しました)

for(int i= 0; i < 4; ++i) {
string name = "e" + i;
TextBox txtBox=this.Controls[name] as TextBox;
Console.Writeline(txtBox.Text);
}
于 2012-06-29T11:10:50.103 に答える
2

エラーが発生しやすいため、このアプローチはお勧めしません。それらの名前を変更したい場合、これを忘れて name で他のコントロールを追加するとどうなりますe...か?

代わりに、のようなコンテナー コントロールにそれらを収集しますPanel。次にLINQ、関連するものを見つけるために使用できますTextBoxes

var myTextBoxes = myPanel.Controls.OfType<TextBox>();

Enumerable.OfTypeそれに応じてコントロールをフィルタリングしてキャストします。それらをさらにフィルタリングする場合は、次のように使用できますEnumerable.Where

var myTextBoxes = myPanel.Controls
                         .OfType<TextBox>()
                         .Where(txt => txt.Name.ToLower().StartsWith("e"));

これで、それらを反復できます。次にTextBoxes例を示します。

foreach(TextBox txt in myTextBoxes)
{
    String text = txt.Text;
    // do something amazing
}

編集

TextBoxes は複数の TabPages にあります。また、名前はもう少し論理的です...

このアプローチは、コントロールが複数のタブページにある場合にも機能します。次に例を示します。

var myTextBoxes = from tp in tabControl1.TabPages.Cast<TabPage>()
                  from panel in tp.Controls.OfType<Panel>()
                  where panel.Name.StartsWith("TextBoxGroup")
                  from txt in panel.Controls.OfType<TextBox>()
                  where txt.Name.StartsWith("e")
                  select txt;

TextBoxGroup(条件を組み合わせることもできることを示すために、パネル名が で始まる必要があるという別の条件を追加したことに注意してください)

もちろん、関連するコントロールを検出する方法は、必要に応じて変更できます (fe with RegularExpression)。

于 2012-06-29T11:13:23.893 に答える
0

これを試して :

this.Controls.Find()

for(int i= 0; i < 4; ++i) {
    string name = "e" + i;
    TextBox txtBox = this.Controls.Find(name) as TextBox;
}

またはこれ:

this.Controls["name"]

for(int i= 0; i < 4; ++i) {
    string name = "e" + i;
    TextBox txtBox = this.Controls[name] as TextBox;
}
于 2012-06-29T11:11:41.413 に答える