在设计器中显示UserControl的公共字段

3

我正在尝试向自定义的UserControl中添加一些字段。我希望这些字段在Visual Studio属性窗口中可见。我尝试使用下面的标志,但即使编译后,在设计器中也看不到该字段。

应该如何正确地实现呢?

public partial class TosChartControl: UserControl
{

    #region PUBLIC FIELDS

    [Browsable(true)] //Added this but still does not show up
    [Category("Data")]
    [DefaultValue(0)]
    [Description("ID of the Sensor Node")]
    public int NodeId { get; set; }

    #endregion

    public TosChartControl()
    {
        InitializeComponent();
    }
}

我已经清理并重新构建了解决方案和项目,但是我仍然无法在属性窗口中看到这个字段。即使重新启动Visual Studio也没有帮助。


1
你可以通过逗号[属性1,属性2]将属性连接在一起(henginy的答案是正确的)。 - Sayse
那么 NodeId 会出现在属性窗口中吗?如果它带有 get/set 属性,我猜它应该会出现。 - Sandy
是的,它应该归入数据类别。 - Dumbo
最简单的解释是,您实际上是在表单上放置了一个旧版本的控件,该控件尚未具备NodeId属性。请注意避免自己将控件添加到工具箱中,这会创建一个副本,很容易过时。 - Hans Passant
这很奇怪,因为默认情况下,所有公共属性都将显示在VS的“属性”窗口中,有一些情况可以为某些属性设置值,但如果它是公共的,则应始终显示。 - King King
2个回答

4

更新:在设计器中,只有当你的公共属性在另一个控件中时才可见。事实证明,你不需要添加此属性,属性默认在设计器中可见。据我所知,当它在另一个组件的设计视图中时,用户控件的实例被创建并且属性可以显示。很抱歉一开始误导了你,我以为添加它是必要的。


尝试使用这个属性:

[Browsable(true)]

http://msdn.microsoft.com/en-us/library/system.componentmodel.browsableattribute.aspx


谢谢。我应该在哪里添加这个属性?是在类本身还是每个字段上?我有一些用户控件(由其他人制作),它们即使没有这个属性也可以工作。 - Dumbo
你需要将属性添加到成员(而不是用户控件),例如 NodeId。 - henginy
是的,我尝试了清理、重建甚至重新启动 VS,但仍然看不到它。 - Dumbo
这是我使用的代码:[Browsable(true), EditorBrowsable(EditorBrowsableState.Always), DefaultValue("None"), Category("Data"), ] - Sayse
我也添加了 EditorBrowsable,但仍然无法理解。 - Dumbo
是的,你说得对,除非我在窗体中拖动控件,否则那些字段不会显示出来。 - Dumbo

2
为了阐释henginy的更新答案:
确保您正在查看要修改属性的控件的实例,而不是控件本身的定义。
澄清一下,当您向TosChartControl类添加属性时,您将无法在TosChartControl.cs [Design]选项卡中看到该属性,而是在您实现TosChartControl时看到它,例如您的Form1.cs [Design]选项卡,即包含控件,您已添加了自定义控件。
假设您的属性窗口可见,并且您已选择控件。
从这个教训中可以得到什么启示:
理解属性窗口实际上向您显示了什么——它是上下文相关的。
模型和模型实现之间的区别——例如设计自定义控件和设计使用自定义控件的表单。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接