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)
它通知设计师组件已更改。您可能会发现我的回答很有用:是的,非常有用。谢谢!