gpt4 book ai didi

c# - 自动生成设计师收藏品的代码隐藏名称

转载 作者:太空狗 更新时间:2023-10-29 17:52:22 25 4
gpt4 key购买 nike

我有一个带有标记为 DesignerSerializationVisibility.Content 的公共(public)集合的自定义控件。

当我使用设计器将项目添加到集合时,它会将它们添加到设计器文件并分配所有所需的值,但它为集合的每个元素提供一个通用名称,例如 MyClass1MyClass2 等。我希望每个项目的“名称”属性成为项目的代码名称,以便我可以在代码中通过名称访问项目。

这是 ContextMenuStrip 和 ToolStrip 工作原理的功能。在这些情况下,Name 属性在属性网格中显示为 (Name)

有没有我可以用来获得此功能的属性或其他东西?还是我必须编写整个自定义设计器对话框?如果是这样,什么是实现此目标的最简单方法的示例?

最佳答案

您可以尝试从 Component 继承以获得该功能。

在这个例子中,我创建了一个名为 PanelItem 的类,它将是我自己的 Panel 类在我的集合中使用的类。我添加了 DesignTimeVisible(false),这样它就不会填充设计器中的组件托盘。

此外,我还添加了一个 Name 属性,它对设计器是隐藏的,但可以在代码中使用。它似乎在我的测试中有效:

[DesignTimeVisible(false)]
public class PanelItem : Component {

[DefaultValue(typeof(string), "")]
public string PanelText { get; set; }

private string name = string.Empty;

[Browsable(false)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
public string Name {
get {
if (base.Site != null) {
name = base.Site.Name;
}
return name;
}
set {
name = value;
}
}
}

然后是我的自定义面板控件:

public class MyPanel : Panel {
private List<PanelItem> panelItems = new List<PanelItem>();

[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public List<PanelItem> PanelItems {
get { return panelItems; }
}
}

结果:

enter image description here

关于c# - 自动生成设计师收藏品的代码隐藏名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11021682/

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