ジェネリックは、タイプなしでクラスをインスタンス化できないため、デザイナーを壊しますT
。私は私のブログの記事では、回避策について説明します。要するに
http://adamhouldsworth.blogspot.co.uk/2010/02/winforms-visual-inheritance-limitations.html
を、あなたは中間のクラスとタイプを "解決" する必要があります。
BaseControl<T> : UserControl
CustomerControl_Design : BaseControl<Customer>
CustomerControl : CustomerControl_Design
あなたca nはその後、条件付きDEBUG
またはRELEASE
コンパイラのスイッチに基づいてコードのうち、このクラスを切り替える:
#if DEBUG
namespace MyNamespace
{
using System;
public partial class CustomerEditorControl_Design : BaseEditorControl<Customer>
{
public CustomerEditorControl_Design()
: base()
{
InitializeComponent();
}
}
}
#endif
public partial class CustomerEditorControl
#if DEBUG
: CustomerEditorControl_Design
#else
: BaseEditorControl<Customer>
#endif
{
}
これは残念ながら、あなたが設計することが可能になることはありません、あなたはCustomerControl
の派生クラスを開くようになります署名のジェネリックによるUIコントロール私の解決策は、派生アイテムの設計のみを可能にすることです。
CustomerControl : BaseControl<Customer>
がこの場合のように機能しない理由はわかりませんが、タイプT
が定義されていますが、一般的な使用法のために推測していません。
Microsoftの防衛のために、これはサポートされていないと言います。
これはコンクリートの顧客タイプに対してのみ機能し、異なるタイプのViewChildを使用したい場合は動作しません。Viewにいくつかの基本コードがありますが、ViewChildを拡張するとにいくつかのコードが追加され、View 、ViewChild 、ViewChild などが表示されます –
wince
@wince正しいです。答えに記載されているように、それは派生したフォームの問題を解決するだけです。実際にコンテンツを持っている一般的なベースフォームを持っているなら、そのアイデアをビニングして、シェルのような構成をすることをお勧めします。私の使い方では、基本コントロールはビジュアルではなくロジックのみを提供していました。 –
@winceあなたの 'View'と 'ViewChild 'にも視覚的な要素がありますか、それとも単なるコードですか? –