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

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

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

Re[2]: コントロールプロパティについて


(過去ログ 11 を表示中)

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

■2164 / inTopicNo.1)  コントロールプロパティについて
  
□投稿者/ あき坊 (8回)-(2007/03/22(Thu) 13:04:51)

分類:[C# (Windows)] 

久しぶりの質問です。また行き詰ってしまいました。

C#にて画面レイアウトを行う際、各種コントロールを配置すると思いますが、
その複数コントロールのプロパティを一元管理する様な手法はありますでしょうか?

例)
TextBoxを2つ配置・RadioBoxを3つ配置
上記5つのコントロールの、フォントを統一したいのですが、
それぞれのコントロールプロパティを変更するのではなく、
一箇所変更すればすべて反映される様な仕組みは作れない
ものでしょうか?

出来るだけ好メンテ対応にしたいものですから、、、
分かる方がいらっしゃいましたら、宜しくお願いいたします。
引用返信 編集キー/
■2165 / inTopicNo.2)  Re[1]: コントロールプロパティについて
□投稿者/ Hirotow (77回)-(2007/03/22(Thu) 13:20:33)
Hirotow さんの Web サイト
2007/03/22(Thu) 13:49:06 編集(投稿者)
2007/03/22(Thu) 13:46:13 編集(投稿者)

パネルをオーバーライドして下記のようなコントロールを定義しておけば、
この上に載せたコントロールのプロパティは一括変更されます。
階層構造を変更したくなければ、
フォームに同様の機能を持ったプロパティを定義し(この場合適切な属性が設定されていればオーバーライドプロパティである必要はありません)、
特定のタグ文字列を持っているコントロールのみを変更するという方法もあります。
またプロパティによっては標準で下層コントロールに継承されることもあります(実はForeColorもそう)。

    public partial class PropertyChangerControl : Panel
    {
        public override Color ForeColor
        {
            get { return base.ForeColor; }
            set
            {
                base.ForeColor = value;
                foreach (Control c in Controls)
                    c.ForeColor = value;
            }
        }
    }

引用返信 編集キー/
■2166 / inTopicNo.3)  Re[1]: コントロールプロパティについて
□投稿者/ よねKEN (24回)-(2007/03/22(Thu) 13:44:13)
よねKEN さんの Web サイト
2007/03/22(Thu) 13:45:46 編集(投稿者)

> C#にて画面レイアウトを行う際、各種コントロールを配置すると思いますが、
> その複数コントロールのプロパティを一元管理する様な手法はありますでしょうか?

あまり一元管理するメリットがわかりませんが、
具体的に行いたい内容によりケースバイケースなのではないでしょうか?

> 例)
> TextBoxを2つ配置・RadioBoxを3つ配置
> 上記5つのコントロールの、フォントを統一したいのですが、
> それぞれのコントロールプロパティを変更するのではなく、
> 一箇所変更すればすべて反映される様な仕組みは作れない
> ものでしょうか?

この例だけに関して言えば、各コントロールを配置する前に、
配置先の親コントロールのFontを統一したいフォントにしておくだけでOKです。

また、この例の場合だけなら、Control.Controlsプロパティからコントロールを再帰的に列挙して、
列挙した各コントロールに同一の処理を適用するという方法も取れるでしょう。

> 出来るだけ好メンテ対応にしたいものですから、、、

個人的な意見ですが、同じ値を機械的にセットしたいような場面はそう多くないように思います。
あるいは最初は仕様ですべて統一するということになっていたけど、
お客様の要望でXXXの項目は例外、YYYの項目も例外といったように例外事項が発生することもあります。

例外事項が出てくると良かれと思って行った一元管理の部分と例外の部分が混合する形になり、
逆効果になる場合もありますので、単純にコードの行数が減る=メンテナンスがよくなる、とは考えない方がよいと思います。

以下、余談です。
今回の話とは内容は違いますが、ソースコードのメンテナンス性のお話が以下にあります。参考までに。

○キミのコードが汚い理由 - @IT
http://www.atmarkit.co.jp/im/carc/serial/redge51/redge51.html
ソースコードを綺麗に書く方法の記事のはずなんだけど、私的には、よろしくない共通化、
読みづらくする形でのコードの短縮化な悪例になっているように思いました。

○第3のコード - 菊池 ブログ
http://www.ailight.jp/blog/kazuk/archive/2007/01/12/13497.aspx
私同様のことを思った方は他にもいらっしゃるようですね。

引用返信 編集キー/
■2485 / inTopicNo.4)  Re[2]: コントロールプロパティについて
□投稿者/ あき坊 (9回)-(2007/04/10(Tue) 12:08:01)
No2166 (よねKEN さん、Hirotowさん) に返信

すいません、インフルエンザで返信が遅れてしまいました。
よねKENさん、Hirotowさんのご教授の元、色々と試してみました。
意外とあっさり解決いたしました。
分かりやすい情報、本当に有難うございました。感謝に尽くせません!!


>>C#にて画面レイアウトを行う際、各種コントロールを配置すると思いますが、
>>その複数コントロールのプロパティを一元管理する様な手法はありますでしょうか?
>
> あまり一元管理するメリットがわかりませんが、
> 具体的に行いたい内容によりケースバイケースなのではないでしょうか?
>
>>例)
>>TextBoxを2つ配置・RadioBoxを3つ配置
>>上記5つのコントロールの、フォントを統一したいのですが、
>>それぞれのコントロールプロパティを変更するのではなく、
>>一箇所変更すればすべて反映される様な仕組みは作れない
>>ものでしょうか?
>
> この例だけに関して言えば、各コントロールを配置する前に、
> 配置先の親コントロールのFontを統一したいフォントにしておくだけでOKです。
>
> また、この例の場合だけなら、Control.Controlsプロパティからコントロールを再帰的に列挙して、
> 列挙した各コントロールに同一の処理を適用するという方法も取れるでしょう。
>
>>出来るだけ好メンテ対応にしたいものですから、、、
>
> 個人的な意見ですが、同じ値を機械的にセットしたいような場面はそう多くないように思います。
> あるいは最初は仕様ですべて統一するということになっていたけど、
> お客様の要望でXXXの項目は例外、YYYの項目も例外といったように例外事項が発生することもあります。
>
> 例外事項が出てくると良かれと思って行った一元管理の部分と例外の部分が混合する形になり、
> 逆効果になる場合もありますので、単純にコードの行数が減る=メンテナンスがよくなる、とは考えない方がよいと思います。
>
> 以下、余談です。
> 今回の話とは内容は違いますが、ソースコードのメンテナンス性のお話が以下にあります。参考までに。
>
> ○キミのコードが汚い理由 - @IT
> http://www.atmarkit.co.jp/im/carc/serial/redge51/redge51.html
> ソースコードを綺麗に書く方法の記事のはずなんだけど、私的には、よろしくない共通化、
> 読みづらくする形でのコードの短縮化な悪例になっているように思いました。
>
> ○第3のコード - 菊池 ブログ
> http://www.ailight.jp/blog/kazuk/archive/2007/01/12/13497.aspx
> 私同様のことを思った方は他にもいらっしゃるようですね。
>
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -