Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.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# 如何在';CollectionEditor';对话_C#_.net_Winforms_Windows Forms Designer_Propertygrid - Fatal编程技术网

C# 如何在';CollectionEditor';对话

C# 如何在';CollectionEditor';对话,c#,.net,winforms,windows-forms-designer,propertygrid,C#,.net,Winforms,Windows Forms Designer,Propertygrid,请先阅读整个问题,了解我在哪里可以重置属性的默认值。 定义可以可视化设计的自定义类时,可以使用以下模式实现集合编辑器来修改列表、数组、集合等属性: [Editor(typeof(CollectionEditor), typeof(UITypeEditor)), DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] public ElementCollection Elements { g

请先阅读整个问题,了解我在哪里可以重置属性的默认值。

定义可以可视化设计的自定义类时,可以使用以下模式实现集合编辑器来修改列表、数组、集合等属性:

[Editor(typeof(CollectionEditor), typeof(UITypeEditor)),
    DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public ElementCollection Elements
{
    get;
}
编辑此类的
元素
属性现在将启动一个
CollectionEditor
对话框,左侧是成员列表,右侧是
PropertyGrid

问题是,此属性网格的上下文菜单似乎已禁用。因此,尽管定义了
[DefaultValue]
属性,但我无法右键单击属性将其值“重置”为默认值

但是,
DefaultValue
属性是可以识别的,因为该属性没有序列化(并且在网格中以未绑定的文本正确显示)

我想知道如何在
CollectionEditor
对话框的
PropertyGrid
上启用此上下文菜单:


或者,可以采用任何方式(热键等)重置这些集合项属性。

您可以创建自己的集合编辑器继承类,然后重写方法,在集合编辑器窗体中查找属性网格,然后注册一个包含属性网格重置菜单项的
ContextMenuStrip
,然后使用以下方法重置属性:

公共类MyCollectionEditor:CollectionEditor
{
public MyCollectionEditor():base(typeof(Collection)){}
受保护的覆盖CollectionForm CreateCollectionForm()
{
var form=base.CreateCollectionForm();
var grid=form.Controls.Find(“propertyBrowser”,true).First()作为PropertyGrid;
var menu=new ContextMenuStrip();
添加(“重置”,null,(s,e)=>{grid.ResetSelectedProperty();});
//根据所选属性启用或禁用重置菜单
菜单打开+=(s,e)=>
{
如果(grid.SelectedGridItem!=null&&grid.SelectedObject!=null&&
grid.SelectedGridItem.PropertyDescriptor.CanResetValue(null))
menu.Items[0]。Enabled=true;
其他的
menu.Items[0]。Enabled=false;
};
grid.ContextMenuStrip=菜单;
申报表;
}
}
并通过以下方式装饰您的收藏财产:

[Editor(typeof(MyCollectionEditor), typeof(UITypeEditor))]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public Collection<MyElement> MyElements { get; private set; }
[编辑器(typeof(MyCollectionEditor),typeof(UITypeEditor))]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
公共集合MyElements{get;private set;}
按照这种方法,您可以简单地添加分隔符、命令和描述菜单

[Editor(typeof(MyCollectionEditor), typeof(UITypeEditor))]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public Collection<MyElement> MyElements { get; private set; }