5

ソリューション内のすべてのデザイナーエラーをクリーンアップしようとしていますが、次のエラーが発生しました。

このファイル内のどのクラスも設計できないため、このファイルの設計者を表示できませんでした。デザイナは、ファイル内の次のクラスを検査しました。DoubleAttributeTextBoxBase---基本クラス'NumericAttributeTextBoxBase'をロードできませんでした。アセンブリが参照されていること、およびすべてのプロジェクトがビルドされていることを確認してください。

クラスは両方とも同じアセンブリで定義されているので、参照の問題ではないことがわかります。基本クラスがジェネリックであるという事実と関係があるのだろうか。何か案は?

public class DoubleAttributeTextBoxBase : NumericAttributeTextBoxBase<double>

public class NumericAttributeTextBoxBase<T> : TextBox where T : IComparable, IComparable<T>
4

2 に答える 2

9

設計されているクラスの基本クラスは、非抽象的かつ非ジェネリックでなければなりません。ジェネリッククラスから継承するクラスを設計可能にするため。回避策は、次の間に些細な非ジェネリッククラスを挿入することです。

public partial class DoubleAttributeTextBoxBase
    : NumericAttributeTextBoxBaseOfDouble
{
    public DoubleAttributeTextBoxBase()
    {
        InitializeComponent();
    }

    // Now DoubleAttributeTextBoxBase is designable.
}

public class NumericAttributeTextBoxBaseOfDouble
    : NumericAttributeTextBoxBase<double>
{
}

これをできるだけ簡単にするために、非ジェネリッククラスを設計するクラスと同じファイルに入れることもできます。設計者はファイルの最初のクラスが設計されているものであることを期待しているため、(上記で行ったように)クラスのに必ず配置してください。

于 2011-07-29T19:36:21.880 に答える
1

解決策はわかりません。これは、C#2.0がリリースされて以来、VisualStudioの深刻な制限となっています。私が言える唯一のことは、実行時にそのコントロールをページに追加することです。そうすれば、少なくとも、他のすべてのためにデザイナーを元に戻すことができます。

msdnから:

コンポーネントまたはコントロールをジェネリック型にすることはできません。これは、テンプレート型またはパラメーター化された型とも呼ばれます。設計環境はジェネリック型をサポートしていません。

http://msdn.microsoft.com/en-us/library/ms171843.aspx

于 2011-07-29T18:23:19.033 に答える