|
■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]);
}
}
}
|