2

フォームに「ツールボックス」を作成できるクラスのリストを作成したいと考えています。要するに、ドラッグ アンド ドロップできるウィジェットのリストですPanel。クラスは同じインターフェースを実装し、リストを作成するためのいくつかの静的メソッドを持ちます。

私が持っているいくつかのコード:

public interface IWidget {
   Image image { get; }
}

public class Gauge : IWidget, PictureBox {
   public static Image image {
       get {
           return Properties.Resources.gauge;
       }
   }
}

フォームに、次のような配列を配置したい:

IWidget[] supported_widgets = { Gauge };

インスタンス化するのではなく、クラスの静的メソッドを使用して、ユーザーが選択できるツールボックスを作成します ( にドロップするとインスタンス化されますPanel)。

foreach (IWidget w in supported_widgets) {
    PictureBox p = new PictureBox();
    p.Image = w.getImage();

    toolbox.Controls.Add(p);
}

で実験しましSystem.Typeたが、少しやり過ぎに感じます。このようなことをする最善の方法は何ですか? クラスをインスタンス化しなくても可能ですか?

4

4 に答える 4

2

クラスのリストを作成したい

文字通り、それは単に不可能です。

できることは、オブジェクト (インスタンス) のリストを作成することです。これは、Type既に試したクラスの場合もあれば、タイプごとにヘルパー クラスを作成する場合もあります。

 class WidgetHelper<T> where  T : IWidget, new() { }

にもう少し機能を追加したい場合がありますIWidget

于 2012-10-23T11:48:39.380 に答える