2012-01-09 13 views
2

私はしばらくの間、フォーム継承を使用していましたが、以下のアプローチで多くの研究をしていません。フォームの代わりに新しいクラスを作成し、既存のフォームから継承し、必要なコントロールを必要に応じて保護されたものに変換するだけです。 Visual Studio 2010のデザイナーは魅力的な作品です。より多くの制御が必要な場合は、いつでもベースメソッドをオーバーライドできます。WinForms継承

次のように私は今、一般的なフォームを作成しています:シンプルな非デザイナーのクラスによって継承されたこのような
partial class EntityCollectionEditor <T> : Form where T : ISomeInterface <T>

フォームは、次のエラー与える:ので、設計者は、このファイルのため表示できませんでした
をその中のどのクラスも設計することはできません。設計者はファイル内の次のクラスを検査しました。XYZ。基本クラスEntityCollectionEditorをロードできませんでした。アセンブリが参照され、すべてのプロジェクトが構築されていることを確認します。

すばらしい解決策がありますが、自分自身を教育するための優れたリソース/記事も探しています。

+1

このクラスから継承することはできず、継承されたフォームクラスでデザイナを使用することはできません。デザイナーは基本クラスのインスタンスを作成できる必要があり、Tタイプのパラメータを提供することはできません。 –

+0

このようにしてみましょう。基本形式には視覚的要素がありません。実行時にすべてを作成します。私は、しかし、それに1つのボタンが含まれていた。私がしなければならないのは、代わりに単純なクラスを使用し、フォームから継承して一般的にすることです。 VSはそこからバッキングリソースファイルを正しく生成しているようです。 –

答えて

3

現在、winformsデザイナーは汎用フォーム/コントロールをサポートしていません。

class GenericBaseForm<T> : Form 
{ } 

class IntForm : GenericBaseForm<Int> 
{ } 

class StringForm : GenericBaseForm<String> 
{ } 

具体的な形は、現在デザイナで使用することができます。

私が使用しているの周りだけの仕事では、特定のフォームタイプを作成することです。不幸にも、特定のフォームがたくさんある場合は、おそらく理想的なソリューションではありません。

+0

それについてはわかりません。新しいクラスXYZを作成し、 'XYZ :Form {}'というクラスを読み込むようにしてください。このクラスをダブルクリックすると、デザイナーの基本フォームが表示されます。これが生産のために頼ることができるかどうか分からない。合併症が起きないようにしましょう。 –