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

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

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

Re[4]: 複数のコントロール操作


(過去ログ 36 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■18089 / inTopicNo.1)  複数のコントロール操作
  
□投稿者/ tanaka (42回)-(2008/05/08(Thu) 16:46:51)

分類:[C#] 

button1・textbox1・panel1等複数のコントロールで同じプロパティを設定する場合

【例】
button1.BackColor  = Red;
textbox1.BackColor = Blue;
panel1.BackColor   = White;

これをメソッドで引数を渡して処理させたいのですがどうすればいいでしょうか

引用返信 編集キー/
■18092 / inTopicNo.2)  Re[1]: 複数のコントロール操作
□投稿者/ επιστημη (970回)-(2008/05/08(Thu) 16:54:21)
επιστημη さんの Web サイト
質問ヘタやなー
意図が通じませんよ。

> これをメソッドで引数を渡して処理させたいのですがどうすればいいでしょうか

どれを引数にするんです?

- { button1,textbox1,panel1 } ?
- BackColor ?
- { Red, Blue, White } ?

引用返信 編集キー/
■18096 / inTopicNo.3)  Re[2]: 複数のコントロール操作
□投稿者/ tanaka (43回)-(2008/05/08(Thu) 17:34:41)
No18092 (επιστημη さん) に返信
> 質問ヘタやなー
> 意図が通じませんよ。
>
>>これをメソッドで引数を渡して処理させたいのですがどうすればいいでしょうか
>
> どれを引数にするんです?
>
> - { button1,textbox1,panel1 } ?
> - BackColor ?
> - { Red, Blue, White } ?
>
できれば全部です
引用返信 編集キー/
■18099 / inTopicNo.4)  Re[3]: 複数のコントロール操作
□投稿者/ 組込系の人 (20回)-(2008/05/08(Thu) 17:59:05)
引数を3つ持ったメソッド作って、そのなかで

button1.BackColor = 引数1;
textbox1.BackColor = 引数2;
panel1.BackColor = 引数3;

じゃダメなんですか?
引用返信 編集キー/
■18101 / inTopicNo.5)  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]);
        }
    }
}

引用返信 編集キー/
■18104 / inTopicNo.6)  Re[4]: 複数のコントロール操作
□投稿者/ tanaka (46回)-(2008/05/08(Thu) 19:26:27)
No18101 (魔界の仮面弁士 さん) に返信
> ■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);
> }
> }
> }
>
ありがとうございます。この案1を元に作成したいと思います。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -