汎用テンプレートを使用して Winforms アプリケーションを作成しようとしています。つまり、すべてのフォームは、新規作成、保存、編集、削除ボタン、いくつかの汎用画像、およびフォームを継承するために手動で配置する残りのものの定義済みテンプレートを継承します。
これを達成する方法についての提案は大歓迎です。
IApplicationWindow
テンプレートのようなフォームとして新しいフォームを作成し、インターフェイスを実装するように強制します。以下のサンプルでは、サブクラスによって実装されることを意図した共通メソッドの宣言を使用して、そのインターフェイスに名前を付けました。
また、あなたが言及した一般的なコントロールに加えて、ヘルパークラスのロギングなど、すべてのウィンドウで一般的に使用されるすべてのものをテンプレートのようなフォームに配置します。
という名前のインターフェースをすでに定義していると仮定するとIApplicationWindow
、テンプレートのようなフォームは次のようになります。
public partial class TemplateForm : Form, IApplicationWindow
{
// Place here as protected class members all object instances
// that are common to all your forms, like helper class for logging
// purposes or security delegates.
[...]
public TemplateForm()
{
InitializeComponent();
}
#region IApplicationWindow interface implementation
public virtual void Save()
{
// Do nothing unless you need common behavior.
// Leave extenders implement the concrete behavior.
}
public virtual void Edit()
{
// Do nothing unless you need common behavior.
// Leave extenders implement the concrete behavior.
}
[...]
#endregion
}
テンプレートのようなフォームを拡張したフォームは次のようになります (特定の実装を提供するには、メソッドをオーバーライドする必要があることに注意してください)。
public partial class AnApplicationWindow : TemplateForm
{
public AnApplicationWindow()
{
InitializeComponent();
}
public override void Save()
{
base.Save();
// Implement specific behavior here
}
public override void Edit()
{
base.Edit();
// Implement specific behavior here
}
[...]
}
最後に、テンプレート フォームの UI に共通コントロールを慎重に配置して、拡張フォームのサイズを変更した場合にコントロールが正しく配置されるようにします (アンカーを正しく使用します)。