Tre*_*ott 9 c# designer winforms
我有一个自定义控件,公共集合标记为DesignerSerializationVisibility.Content.
当我添加使用设计项目的集合,它把它们添加到设计文件和分配所有所需的值,但它给人的集合中的每个元素的总称,如MyClass1,MyClass2等我想每个"名称"属性item成为项目的代码名称,以便我可以在代码中按名称访问该项目.
这是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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后我的自定义面板控件:
public class MyPanel : Panel {
private List<PanelItem> panelItems = new List<PanelItem>();
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public List<PanelItem> PanelItems {
get { return panelItems; }
}
}
Run Code Online (Sandbox Code Playgroud)
导致:

| 归档时间: |
|
| 查看次数: |
1288 次 |
| 最近记录: |