C# 在C中使用CollectionEditor更改项的名称#

C# 在C中使用CollectionEditor更改项的名称#,c#,winforms,windows-forms-designer,C#,Winforms,Windows Forms Designer,对于设计时支持,我正在实现一个CollectionEditor,如下所示: class CustomCollectionEditor : CollectionEditor { ... protected override CollectionForm CreateCollectionForm() { ... var propertyGrid = form.Controls.Find( PropertyGridComp

对于设计时支持,我正在实现一个
CollectionEditor
,如下所示:

class CustomCollectionEditor : CollectionEditor
{
    ...
    protected override CollectionForm CreateCollectionForm()
    {
        ...
        var propertyGrid = form.Controls.Find(
            PropertyGridComponentName, true).First() as PropertyGrid;
        ...
    }
    ...
}
通过以下方式连接到自定义控件:

[Editor(typeof(CustomCollectionEditor), typeof(UITypeEditor))]
class CustomControl : Control
{
    ...
}
通过重写
CollectionEditor
类的
CreateCollectionForm()
方法,我可以访问
PropertyGrid
,并能够通过访问相应的
PropertyDescriptor
实例来更改所选项的属性

但是,设置
Name
属性似乎不会更新集合编辑器中的实例名称

如果我尝试以下方法:

var descriptor = TypeDescriptor.GetProperties(propertyGrid.SelectedObject)["Name"];
descriptor.SetValue(propertyGrid.SelectedObject, "instanceName");
该语句似乎已执行,但属性网格中选定项的名称没有更改

因此,我的问题是,如果可能的话,如何以编程方式更新所选项目的
Name
属性?

为清楚起见,我尝试从代码中更新在属性网格的名称字段中键入的内容,如下所示:

class CustomCollectionEditor : CollectionEditor
{
    ...
    protected override CollectionForm CreateCollectionForm()
    {
        ...
        var propertyGrid = form.Controls.Find(
            PropertyGridComponentName, true).First() as PropertyGrid;
        ...
    }
    ...
}

同样,可以使用上述方法更改所有其他属性(例如,“前景色”、“文本”等),而不会出现问题;只有
名称
属性造成了困难。我认为这是因为
Name
不是“不动产”

任何建议都将不胜感激。

(名称)
属性属于
组件
,您可以通过将选定对象强制转换为并设置其:


当存在同名组件时,应将代码放入try/catch块以处理异常。

使用
CollectionEditor
时还有一个警告,当
component.Site.name=name
执行实际重命名时,会有一个附加声明
TypeDescriptor.GetProperties(propertyGrid.SelectedObject)[“Name”]=Name
CollectionEditor
必须的,才能“查看”属性是否已更改,从而在将集合传递回调用它的窗体或控件时更新。在
设计器中,可以使用
this.RaiseComponentChanged(null,null,null)
它通知设计师组件已更改。您可能会发现我的回答很有用:是的,非常有用。谢谢!