複数の新機能を持つ Windows フォームのようなクラスを作成しようとしています。これは単純に の「より良い」バージョンにForm
なり、この正確なプログラムでの作業がより簡単になります。これが私がこれまでに持っているものです:
public class SuperForm : Form
{
protected abstract void OnSizeChanged(object sender, EventArgs e);
public SuperForm()
{
this.SizeChanged += OnSizeChanged;
}
}
OnSizeChanged
サイズが変更されたときに自動的に呼び出されるものをすべてのフォームが定義する必要があることを確認するだけですが、それ以上のものがあります。
次に必要なのは、クラス/タイプをパラメーターとして取り、そのタイプの新しいオブジェクトを初期化し、自動的に追加してからControls
オブジェクトを返すメソッドです。これがどのようになりたいかについてのコード例です(動作していません):
public cls NewControl(ClassType cls) // This obviously doesn't work.
// I need it to return an object of type "cls" parameter.
{
cls newControl = new cls();
this.Controls.Add(newControl);
return newControl;
}
ClassType
が有効なタイプではないことはわかっているため、助けが必要です。
そして、基本的に次のように呼び出すことができます。
Button b = this.NewControl(Button);
これは新しいボタンを返し、それを に追加しthis.Controls
ます。コントロールを初期化するときに、最終的にはこれらの一般的なタスクをさらに実行する必要があるかもしれないので、それを独自のメソッドに入れたいと思います。
これはC#で可能ですか? そうでない場合、回避策はありますか?Control
1 つの方法は、次のように継承する各クラスのメソッドを定義することです。
public Button NewControl(Button b);
public TextBox NewControl(TextBox tb);
public ListBox NewControl(ListBox lb);
しかし、それは私にとって有効な選択肢のようには思えません。