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

由于这是您自己的自定义类型(不是框架类型),因此此错误几乎总是意味着您在两个不同的程序集中声明了相同的接口。

检查此类型的声明位置。它应该只在一个程序集中。根据需要添加引用,以便所有位置都可以访问单个程序集中的类型。

将相同的代码文件编译到两个程序集中会创建两种不同的类型,它们恰好被称为相同的东西。它们不是同一类型,不可互换。

于 2012-10-07T13:02:05.493 回答
1

我有一个类似的问题。我去 resx 文件,找到导致问题的类型的对象,然后将其删除。然后我在运行时为该属性分配了一个值。这样,设计者就没有什么可抱怨的了,您可以安全地在不同的程序集中使用派生控件。

于 2018-08-16T16:56:24.867 回答
0

我在 VS 2019 中遇到了类似的问题,最终删除了 .vs 文件夹。在那之后一切都很好。

于 2020-04-23T16:02:56.997 回答