0

5つの文字列変数があり、実行時にそれらに「Foo」を割り当てたいとします。

これの代わりに

string a1 = "Foo";
string a2 = "Foo";
string a3 = "Foo";
string a4 = "Foo";
string a5 = "Foo";

このようなものを使用することはできません:

for(int i = 0;i < 5;i++)
{
    a+i = "Foo";
}

同様の方法でそれらにアクセスすることは不可能ですか?

4

7 に答える 7

4
Label[] labels = new Label[] { label1, label2, label3, label4, label5 };

for (int i = 0; i < labels.Length; i++)
{
    labels[i].Text = "Foo";
}
于 2009-04-22T15:03:39.933 に答える
4

他の人が言っているように、配列(または別のコレクション)はこれを行うためのはるかに優れた方法です。

配列は、常にインデックスでアクセスする変数のコレクションであると考えてください。

質問に示されているように、変数のセットが必要になる理由は考えられません。どうしてもそうする必要あり、それらがインスタンス/静的変数である場合、本当に必要な場合はリフレクションを使用してそれらにアクセスできますが、配列または他のコレクションを使用する方がはるかに優れています。

于 2009-04-22T15:07:03.560 に答える
2

ラベルの親のコントロールを反復処理することで、次のことができます。

for (int i=0; i<= parent.controls.count(); i++)
{
    if (parent.controls("label" + i)  != null)
    {
         ...
    }
}

HTH

編集:

編集後、私がそれを行うのを見ることができる唯一の方法は、それらをリスト/配列/辞書に追加し、それを繰り返すことですが、原則は同じです。

于 2009-04-22T15:02:31.327 に答える
2

名前でコントロールにアクセスできますが、ラベルアイテムの配列をページに追加してから、整数を使用して配列にアクセスする方がはるかにクリーンです。

于 2009-04-22T15:00:19.100 に答える
1

すべてのラベルに同じ親があり、その親に他のラベルコントロールが含まれていない場合は、次の操作を実行できます。

foreach (Control lbl in ParentControl)
{
    if (lbl is TextBox)
    {
        ((Label)lbl).Text = "Foo";
    }
}
于 2009-04-22T15:04:07.483 に答える
1

ラベルの配列または配列リストを作成し、それらにラベルを配置できます。次に、これと同様のことを行うことができます。

于 2009-04-22T15:01:13.280 に答える
1

ここでWebフォームについて話していると仮定すると、使用できるFindControl()メソッドがあります。

private void Button1_Click(object sender, EventArgs MyEventArgs)
{
  // Find control on page.
  TextBox myControl1 = (TextBox) FindControl("Label1");
  if(myControl1!=null)
  {
     string message = myControl1.Text;
  }
}
于 2009-04-22T15:08:26.287 に答える