在许多代码示例中,我发现正在使用的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,或者一般的控件。
答案 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)”签名,因此它会检索比显示的更多详细信息...