gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 12:51:02 25 4
gpt4 key购买 nike

为了设计时支持,我正在实现一个 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 属性?

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

enter image description here

同样,使用上述方法可以毫无问题地更改所有其他属性(例如、“ForeColor”、“Text”、);只是 Name 属性造成了困难。我认为这是因为 Name 不是“真实的” 属性。

如有任何建议,我们将不胜感激。

最佳答案

(Name) 属性属于 Component,您可以通过将所选对象转换为 Component 来更改属性网格中所选对象的名称。并设置它的 Site.Name :

var component = propertyGrid.SelectedObject as Component;
if(component !=null )
{
component.Site.Name = "SomeNewName";
propertyGrid.Refresh();
}

当存在同名组件时,您应该将代码放在 try/catch block 中以处理异常。

关于c# - 在 C# 中使用 CollectionEditor 更改项目的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35545045/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com