2009-10-06 72 views
13

這是隱藏派生控件中屬性的方法嗎?在自定義控件中隱藏不需要的屬性

public class NewButton : Button

...

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

而且這個隱藏在設計師的屬性窗口中的屬性,但我怎麼也隱藏在代碼中的財產?

回答

15

從代碼,你可以做到這一點,以隱藏它,也許會讓一件很痛苦的直接調用最接近的 - 請注意,隱藏,即使它是可調用的,並沒有這將工作過去投:

// 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; } 

個人而言,我不打擾。它不健壯(只是施放)。

+0

謝謝馬克。在這種情況下,通過施放你的意思是轉換到父類,Button? – 2009-10-06 22:35:36

1

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

1

不,您可以將它們從設計器中移除(如圖所示),但您無法真正隱藏它們的表單代碼,因爲這會違反替代原則。有人問&在這裏多次回答,例如參見this SO question

2

可以使用[EditorBrowsable]屬性作爲documented here

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

從文檔:

... Visual Studio中的智能感知引擎使用此屬性來確定是否顯示的屬性或方法。

但是,用戶可以在VS設置中覆蓋此值。 ReSharper還具有一個設置,用於控制此屬性是否在其智能感知中得到遵守。

出於好奇,爲什麼要隱藏用戶的東西?僅僅因爲會員隱藏在上述方式中並不意味着你不能在代碼中使用它併成功編譯它。它只會抑制會員的可發現性。

+0

隱藏我的意思是完全「刪除」它,所以你不能訪問它。這是因爲Button的一些屬性不適用於我的控件。 – 2009-10-06 22:34:13

+0

您是否考慮過繼承Button類的父類並重新實現您需要的?我會考慮提出一個新的問題,探討爲什麼你需要改變按鈕的行爲,並尋找不同的方法來實現這一點。 – 2009-10-06 22:55:39

0

你爲什麼不把它變成私人的?它保證祖先不會看到它。 編輯: 在這種情況下,你必須從基地繼承一個新的類,並使用你的新類,它現在隱藏了屬性。

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

因爲這可能或不可能。有時你只是想從GUI中隱藏一些東西。 – 2016-12-09 10:56:12

+0

我剛試過這個 - 該屬性仍然出現在設計器中。 – JPNotADragon 2017-05-19 15:10:09

相關問題