Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何显示PropertyGrid中不常见的属性?_C#_Winforms - Fatal编程技术网

C# 如何显示PropertyGrid中不常见的属性?

C# 如何显示PropertyGrid中不常见的属性?,c#,winforms,C#,Winforms,Microsoft文档显示PropertyGrid仅显示数组中所有对象的公共属性 因此,我尝试将具有不同属性值的对象应用于propertygrid.SelectedObject,发现propertygrid中的属性未显示任何内容(空白) 当对象具有不同的属性值时,是否可以使属性显示不同的内容(例如,不同的选项…)?因为当所选对象具有不同的属性值或相同的属性值为空(null)时,它是不明确的 以下是我的代码示例: public partial class Form1 : Form { Re

Microsoft文档显示PropertyGrid仅显示数组中所有对象的公共属性

因此,我尝试将具有不同属性值的对象应用于propertygrid.SelectedObject,发现propertygrid中的属性未显示任何内容(空白)

当对象具有不同的属性值时,是否可以使属性显示不同的内容(例如,不同的选项…)?因为当所选对象具有不同的属性值或相同的属性值为空(null)时,它是不明确的

以下是我的代码示例:

public partial class Form1 : Form
{
    Rectangle[] rectangles = { new Rectangle(2, 2),new Rectangle(1, 2)};
    public Form1()
    {
        // The initial constructor code goes here.
        InitializeComponent();
        propertyGrid1.SelectedObjects = rectangles;          
    }
}

public class Rectangle
{
    public Rectangle(int height, int width)
    {
        Height = height;

        Width = width;
    }

    [Category("1. Property")]
    [DisplayName("1. Height")]
    public int? Height { get; set; } 

    [Category("1. Property")]
    [DisplayName("2. Width")]
    public int? Width { get; set; } 
}
运行以上命令后,我得到以下结果:

但我预期的结果如下(我使用photoshop,因为我无法实现它):

对不起,我没有澄清我的问题。假设有两种情况:

案例1:两个选定对象具有不同的“高度”值,即一个高度为2,另一个高度为1,然后我们在属性网格中看到该属性的“空白值”

案例2:两个选定对象具有相同的“高度”值:NULL,然后同样,我们在属性网格中看到该属性的“空白值”

是否有可能区分案例1和案例2


提前感谢。

如果没有看到所需的类和代码示例以及无法按预期工作的内容,则很难回答此问题。我建议您仔细阅读SO部分,因为它显示了SO是如何工作的。这可能会有所帮助。此外,您可能会发现SO部分很有用。回答此类问题所需的代码示例谢谢提醒。我只是将问题调整得更具体一些。您需要一个自定义
编辑器
和/或自定义
类型转换器
,具体取决于您要显示的编辑器类型以及是否允许编辑属性值。例如,用
[Editor(typeof(CollectionEditor),typeof(UITypeEditor))]
装饰以显示标准
CollectionEditor
界面。当然,它不会显示属性值,因为它不知道如何处理您的类型,但是您可以从这个编辑器派生自定义编辑器并转换对象。或自定义
可扩展对象转换器
。顺便说一句,您的类对象的名称不好,构造函数需要重载。您还可以在自定义编辑器中显示任何其他表单对象:您构建的表单以您想要的方式处理这些值的表示(并最终进行编辑)(即构建专门的自定义接口)。