現在、私はいくつかのフィールドを追加してカスタマイズした.NETを作成する必要があるツールで作業しています。私はこれを解決するために、より良い何であるかのアプローチ思ってきたし、次のオプションに考えて:.NETコントロールへの機能拡張
オプションA: - 各コントロールの派生クラスを作成します(clabelが、CGroupBox、のは言わせて...)ここで私は各クラスの新しいフィールドを定義します。これはの悪化を意味しますが、で操作するのは簡単です。
例:
class CLabel: Label
{
public List<Control> RelatedControls {get; set;}
public String textHint;
// more stuff...
public CLabel()
{}
}
オプションB: - このオプションは、各コントロールから派生したクラスを作成し、実際のラベル、グループボックスなどのコントロールを使用してカプセル化するクラスを作成しない意味するすべて"余分な"特性。この追加のプロパティオブジェクトは、Control.Tag
プロパティで参照されます。 Tag
プロパティ内の複雑なオブジェクトを参照することは私にはちょっと気分が悪いと感じていますが、このは、コントロールのサブクラス化を行う必要はありません。
例:
Label lbl = new Label();
lbl.Tag = new ControlDescription();
オプションC: - これは一例clabelがために、カスタムコントロールを作成するオプションAとBの組み合わせのいくつかの並べ替えを持つ意味し、タイプControlDescriptionフィールドを追加しますLabelコントロールに追加します。この方法でカプセル化とメンテナンスを保証しますが、Tag
の事は避けてください。
私は確かにそこより多くのオプションがあります。おそらく多形性(私はまだ問題がある概念)を使用しているのでしょうか?カスタムコントロールクラスは取り除くことができます。これらのオプションのどれがあなたが最高のものと思いますか?このすべてがよりうまくいくと思いますか?
ありがとう、私もこれを見ていきます。 –