2010-02-02 58 views
-1

我正在爲Date創建自定義MaskedTextBox。現在我想從其用戶隱藏MaskedTextBox的Mask屬性。如何在創建自定義控件時將預先設置的公共屬性設置爲私有

編輯:

public class CustomDateMask:System.Windows.Forms.MaskedTextBox 
    { 

     public new string Mask 
     { 
      get; 
      private set; 
     } 

     public CustomDateMask() 
     { 
      this.Mask = @"00/00/2\000"; // this property should not be set by any one now 
      this.ValidatingType = typeof(System.DateTime); // this property should not be set by any one now 
     } 
    } 

我應該做的,這樣沒有人可以設置該屬性

回答

1

複製並粘貼到您的類:

[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] 
public new string Mask { 
    get { return base.Mask; } 
    set { base.Mask = value; } 
} 

的[可瀏覽]屬性隱藏在屬性窗口的屬性。 [EditorBrowsable]屬性將其從IntelliSense中隱藏起來。

+0

@nobugz:我們是否需要使用任何命名空間也可以使用System.ComponentModel的可瀏覽 – 2010-02-02 21:52:37

+0

; Visual Studio 2008應該提示你自動添加它,儘管.... – Greg 2010-02-02 21:57:25

3
public class Test : System.Windows.Forms.TextBox 
{ 
    public new string Text 
    { 
     get { return base.Text; } 
     private set { base.Text = value; } 
    } 

    public Test() 
    { 
     base.Text = "hello"; 
    } 
} 


Test test = new Test(); // Create an instance of it 
string text = test.Text; 
text.Text = "hello world"; // comp error 

錯誤詳細信息:

錯誤1屬性或索引「 ScratchPad.Test.Text'不能在這種情況下使用,因爲set訪問器是不可訪問的C: \ @Dev \ ScratchPad \ ScratchPad \ ScratchPad \ Form1.cs 33 13 ScratchPad

+1

這是一個:通過強制轉換爲基本類型很容易避免的,b:根本不返回(基本)掩碼。 – 2010-02-02 21:34:44

+0

@gmcalab:即使這樣做後,我可以設置Mask屬性。它還沒有隱藏起來 – 2010-02-02 21:42:12

+0

@Shantanu Gupta,我不知道你做了什麼,但我更新了我的代碼。它錯誤,如果我嘗試設置它。 – Gabe 2010-02-02 21:43:52

4

您不能完全刪除它,而不會破壞Liskov substitution principal;但是您可以重新聲明並隱藏它(使其不可瀏覽或使setter保持私有狀態)。

但IMO是一個壞主意;包裹控制將更清潔。

請注意,成員隱藏可以簡單地通過鑄造作爲基礎類型來輕鬆避免(甚至無需實現)。

+4

包裝控件是做這件事的「正確」方式,因爲這個日期框是*不是* MaskedTextBox。並且避免了作爲基礎類型的問題。 – 2010-02-02 21:36:40

相關問題