0

winform (テキストボックス/チェックボックス) に、数字が追加された非常によく似た名前のフィールドがたくさんあります。たとえば、AName1、BName1、CName1、次に AName2、BName2、CName2 などです。私がやりたいのは、これらすべてを forloop で反復処理することです。次のようになります。

for (int i = 0, i<4, i++)
{
    ANamei.Text = blah;
    BNamei.Text = blah;
    CNamei.Text = blah;
}

明らかに、上記のコードの i は機能しません。私の質問は、ループ内でこの変数を指定してテキスト ボックス オブジェクトにアクセスするにはどうすればよいですか? ありがとう!

4

2 に答える 2

1

このクラスのメンバーの名前でそれを行う必要がある場合は、リフレクションを使用して行うこともできますが、これは少しやり過ぎで、@thecoop のソリューションよりも遅いかもしれませんが、参考までに小さなサンプルを示します。

class MyObject
{
    public string Text { get; set; }
}

class MyClass
{
    private MyObject _myObject1 = new MyObject();
    private MyObject _myObject2 = new MyObject();
    private MyObject _myObject3 = new MyObject();

    public void Foo()
    {
        for (int i = 1; i < 4; i++)
        {
            // get the member of this type MyClass
            var member = GetType().GetMember("_myObject" + i, BindingFlags.Instance | BindingFlags.NonPublic);
            var fieldInfo = (FieldInfo)member[0];
            // get the value of the member info
            var field = fieldInfo.GetValue(this);
            // get the property to set
            var propertyInfo = field.GetType().GetProperty("Text");
            // set the value
            propertyInfo.SetValue(field, "my text", null);
        }

    }
}
于 2013-04-16T16:04:53.540 に答える