C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 36 を表示中)
■18101 / )  Re[3]: 複数のコントロール操作
□投稿者/ 魔界の仮面弁士 (720回)-(2008/05/08(Thu) 18:30:53)
No18096 (tanaka さん) に返信
>>>これをメソッドで引数を渡して処理させたいのですがどうすればいいでしょうか
>>どれを引数にするんです?
> できれば全部です

用途が良く分からないのですが、その引数の指定というのが、

    SetValues(
        "BackColor",
        new Control[] { button1, textBox1, panel1 },
        new object[] { Color.Red, Color.Blue, Color.White }
    );

という構文で構わないのであれば、これでどうでしょう。


====== 案1 ======
void SetValues(string propertyName, Control[] targets, object[] values)
{
    if (targets == null || values == null) throw new ArgumentNullException();
    if (targets.Length != values.Length) throw new ArgumentOutOfRangeException();

    PropertyInfo prop = typeof(Control).GetProperty(propertyName);
    if (prop != null)
    {
        for (int i = 0; i < targets.Length; i++)
        {
            prop.SetValue(targets[i], values[i], null);
        }
    }
}


====== 案2 ======
void SetValues(string propertyName, Control[] targets, object[] values)
{
    if (targets == null || values == null) throw new ArgumentNullException();
    if (targets.Length != values.Length) throw new ArgumentOutOfRangeException();

    for (int i = 0; i < targets.Length; i++)
    {
        PropertyDescriptor prop = TypeDescriptor.GetProperties(targets[i])[propertyName];
        if (prop != null)
        {
            prop.SetValue(targets[i], values[i]);
        }
    }
}

返信 編集キー/


管理者用

- Child Tree -