3

から派生コントロールを作成しましたがPropertyGrid、次のプロパティにより、デザイン時に Visual Studio で問題が発生します。

注: 実行時に問題はありません。それはデザイナーだけの問題であり、フォームのリソース ファイルからエンコードされた値を手動で削除すると問題が解決します。

コンストラクター:

/// <summary>
/// Public constructor.
/// </summary>
public FilterablePropertyGrid()
{
    base.SelectedObjects = wrapper.ToArray();
}

プロパティ コード:

private List<ObjectWrapper> wrapper = new List<ObjectWrapper>();

/// <summary>
/// Overwride the PropertyGrid.SelectedObject property.
/// The object passed to the base PropertyGrid is the wrapper.
/// </summary>
public new List<ICustomType> SelectedObjects
{
    get
    {
        return wrapper.Any() ?
            base.SelectedObjects.Select(p => ((ObjectWrapper)p).SelectedObject).ToList() :
            new List<ICustomType>();
    }
    set
    {
        if (value == null || value.Count == 0)
        {
            wrapper = new List<ObjectWrapper>();
            base.SelectedObjects = new object[] { };
        }
        else
        {
            wrapper = new List<ObjectWrapper>(value.Select(p => new ObjectWrapper(p)));
            // Link the wrapper to the parent PropertyGrid.
            base.SelectedObjects = wrapper.ToArray();
        }
    }
}

エラー: ここに画像の説明を入力

何が問題なのか教えていただけないでしょうか。

4

3 に答える 3

1

これは独自のカスタム型 (フレームワーク型ではない) であるため、このエラーはほとんどの場合、2 つの異なるアセンブリで同じインターフェイスを宣言したことを意味します。

この型が宣言されている場所を確認してください。1 つのアセンブリにのみ含める必要があります。すべての場所が 1 つのアセンブリ内の型にアクセスできるように、必要に応じて参照を追加します。

同じコード ファイルを 2 つのアセンブリにコンパイルすると、たまたま同じものと呼ばれる 2 つの異なる型が作成されます。それらは同じタイプではなく、交換可能ではありません。

于 2012-10-07T13:02:05.493 に答える
1

同様の問題がありました。resx ファイルに移動し、問題の原因となっているタイプのオブジェクトを見つけて、それを削除しました。次に、実行時にプロパティに値を割り当てました。このように、設計者は文句を言う必要がなく、派生したコントロールを別のアセンブリで安全に使用できます。

于 2018-08-16T16:56:24.867 に答える