C#UserControl自定义属性

时间:2010-04-27 13:27:20

标签: c# user-controls properties

我正在创建一个usercontrol,它提供了一系列文本框样式的所有常见验证:alpha,number,decimal,SSN等。因此,当使用此控件的开发人员选择alpha样式时,他们也可以选择另一个property,定义在验证期间也可以允许的特殊字符串。

但是当选择了十进制样式时,我想简单地禁用特殊字符属性,以便在选择不允许使用特殊字符的样式时无法设置它。

我如何实现这一目标?

感谢

2 个答案:

答案 0 :(得分:2)

你不能在C#中禁用属性 - 它们是你的类型接口的一部分,它承诺调用者可以在编译时绑定到那些操作。

最简单的实现是在用户指定不兼容的样式时忽略特殊字符。这是惯用的.NET行为 - 例如,请参阅CompareValidator,它具有一些互斥的属性:

  

不要同时设置ControlToCompare   和ValueToCompare属性   同一时间。你可以比较   输入控件的值   另一个输入控件,或者一个   恒定价值。如果两个属性都是   设置,ControlToCompare属性   优先。

话虽如此,这种技术使得类比他们需要的更难使用 - 他们的界面并没有真正告诉你如何使用它们。我建议将验证器分为两类:一类用于字母验证,另一类用于数字验证。

或者,当样式不支持特殊字符时,您可以在setter中抛出异常。通常,这太激烈了,但是它让客户程序员明白他们已经做了一些无效的事情。

答案 1 :(得分: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 = ""; }
}
相关问题