簡體   English   中英

在自定義控件中隱藏不需要的屬性

[英]Hiding unwanted properties in custom controls

這是在派生控件中隱藏屬性的方法嗎?

public class NewButton : Button

...

[Browsable ( false )]
public new ContentAlignment TextAlign { get; set; }

這也將屬性隱藏在設計器的“屬性”窗口中,但是如何在代碼中也隱藏屬性?

在代碼中,最接近的代碼可以將其隱藏起來,並且可能使直接調用變得很痛苦-請注意,即使隱藏了該代碼也可以調用,並且所有這些都不能在強制轉換之后起作用:

// about the closest you can do, but not really an answer
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
[Obsolete("just cast me to avoid all this hiding...", true)]
public new ContentAlignment TextAlign { get; set; }

就個人而言,我不會打擾。 它並不健壯(只是強制轉換)。

您可以使用[EditorBrowsable]屬性,如此處所述

[EditorBrowsable(EditorBrowsableState.Never)]
public bool HideMeInIntellisense
{
    // ...

從文檔中:

... Visual Studio中的IntelliSense引擎使用此屬性來確定是顯示屬性還是方法。

但是,用戶可以在VS設置中覆蓋此設置。 ReSharper還具有一個設置,用於控制是否在其IntelliSense中使用此屬性。

出於好奇,為什么要向用戶隱藏某些內容? 僅僅因為成員以上述方式被隱藏並不意味着您不能在代碼中使用它並成功編譯它。 它只是抑制了成員的發現性。

也許您想要做的是從ContainerControl或UserControl派生的,向該控件添加一個Button並僅公開想要保留的Button接口的那些部分。

不,您可以將它們從設計器中刪除(如圖所示),但是您不能真正將它們隱藏在表單代碼中,因為這將違反替換原則。 在這里已經被問過很多次了,例如參見這個SO問題

您為什么不將其設為私有? 它保證祖先不會看到它。 編輯:在這種情況下,您必須從基礎繼承一個新類並使用您的新類,該類現在隱藏了ths屬性。

public class MyTextBox: TextBox
{
...
        private new ContentAlignment TextAlign
        {
          get { return base.ContentAlignment; }
          set { base.ContentAlignment = value; }
        }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM