查找和使用隐藏属性(例如DisplayRectangle)

时间:2010-09-14 12:18:25

标签: c# visual-studio intellisense

在许多代码示例中,我发现正在使用的Control对象的DisplayRectangle属性。 但是,此属性不会出现在intellisense弹出窗口中,也不会显示任何语法突出显示,但它会按预期进行编译和工作。

我应该使用这种财产吗?

我怎样才能找到更多这些信息,是否可以在intellisense中激活它们?

更新/澄清:我现在发现它似乎确实取决于哪个控件。以下代码编译:

        Control c = sender as Control;
        Form f = sender as Form;
        PictureBox p = sender as PictureBox;
        Console.Write(c.DisplayRectangle); // No Intellisense
        Console.Write(f.DisplayRectangle); // Intellisense
        Console.Write(p.DisplayRectangle); // No Intellisense

我的问题是关于PictureBox的DisplayRectangle,或者一般的控件。

3 个答案:

答案 0 :(得分:8)

这是财产的声明:

[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
[EditorBrowsable(EditorBrowsableState.Advanced)]
[Browsable(false)]
[SRDescription("ControlDisplayRectangleDescr")]
public virtual Rectangle DisplayRectangle
{
    get
    {
        return new Rectangle(0x0, 0x0, this.clientWidth, this.clientHeight);
    }
}

从[Browsable]开始,该属性确保属性不会显示在“属性”窗口中。这是有道理的,因为它是一个运行时属性,没有setter。这也是与[DesignerSerializationVisibility]的相关性,它确保不将属性值写入InitializeComponent()方法。 [SRDescription]用于本地化。

[EditorBrowsable]与您的问题相关。使用EditorBrowsableState.Advanced可确保IntelliSense仅在编辑器以“显示高级IntelliSense信息”模式运行时才显示该属性。我知道使用此功能的唯一IDE是VB.NET,其IntelliSense弹出窗口有一个“全部”选项卡,但默认为“公共”。但不是C#IDE,这是你用问题标记的语言。

我猜你实际上是用VB.NET编程,而不是C#编程。单击弹出窗口中的All选项卡。

答案 1 :(得分:0)

相反,您可以将该线轻微修改为:(c as Control).DisplayRectangle。在关闭括号之后的这种风格中,intellisense应该显示属性。这可以解决你的问题吗?

答案 2 :(得分:0)

要扩展Hans Passant的答案,那些EditorBrowsableState.Advanced Properties将不会显示在IntelliSense 的自动完成中,除非您取消选中“隐藏高级成员”

根据http://msdn.microsoft.com/en-us/library/system.componentmodel.editorbrowsableattribute.aspx,“在Visual C#中,您可以控制何时在智能感知和属性窗口中显示高级属性,并在工具|选项|文本编辑器| C#下隐藏高级成员设置。”

请注意,在我完成完整(并且正确装入)的属性名称后,无论我如何设置“选项”复选框,工具提示总是会弹出...也许是因为我一直在使用带有高级转向的VS on,现在它的缓存数据库包含详细信息,但我认为这不是完整的故事:我注意到使用声明为“[EditorBrowsable(EditorBrowsableState.Advanced)]的公共void测试(对象o)的Test方法”使用字符串参数会显示“Test(object)”签名,因此它会检索比显示的更多详细信息...