2010-04-27 150 views
3

我正在創建一個用戶控件,它提供了一系列文本框樣式的所有常見驗證:alpha,數字,十進制,SSN等等,因此,當開發人員使用此控件選擇Alpha樣式時,他們也可以選擇另一個屬性,它定義了驗證期間也可以允許的特殊字符串。C#UserControl自定義屬性

但是,例如,當選擇小數樣式時,我想簡單地禁用特殊字符屬性,因此當不允許特殊字符的選擇樣式時它不可設置。

我該如何實現這個目標?

感謝

+0

不知道它是如何工作的,但也許可以解釋一下控件的「擴展」屬性,比如工具提示爲每個活動控件添加一個屬性。我找不到一個很好的例子,但是你可以使用這個模式動態地爲你的控件添加屬性? – Mike 2010-04-27 14:05:22

回答

0

我會考慮的屬性設置者做

private string specialCharacters = ""; 
public string SpecialCharacters 
{ 
    get { if (usingDecimals) 
      specialCharacters = ""; 

     return specialCharacters; } 

    set { if(usingDecimals) 
      value = ""; 

     specialCharacters = value; } 
} 

private boolean usingDecimals = false; 
public boolean UsingDecimals 
{ get { return usingDecimals; } 
    set { usingDecimals = value; 
     if(usingDecimals) 
      specialCharacters = ""; } 
} 
2

你不能在C#中禁用特性 - 他們是你的類型的接口,它承諾,呼叫者可以的一部分在編譯時綁定到這些操作。

最簡單的實現是在用戶指定不兼容的樣式時忽略特殊字符。這是地道的.NET的行爲 - 例如,看到CompareValidator,其中有一些相互排斥的屬性:

不要同時設置ControlToCompare 和 的ValueToCompare財產同一時間。您可以將輸入控件的值 與另一個輸入控件的 或 的常數值進行比較。如果兩個屬性都設置爲 ,則優先使用ControlToCompare屬性 。

話雖如此,這種技術使類難以使用比他們需要的 - 他們的接口並沒有真正告訴你如何使用它們。我建議把你的驗證器分成兩類:一類用於字母驗證,一類用於數字驗證。

或者,如果樣式不支持特殊字符,則可以在setter中引發異常。通常情況下,這太激烈了,但是它讓客戶程序員清楚他們做了一些無效的事情。