我正在创建一个usercontrol,它提供了一系列文本框样式的所有常见验证:alpha,number,decimal,SSN等。因此,当使用此控件的开发人员选择alpha样式时,他们也可以选择另一个property,定义在验证期间也可以允许的特殊字符串。
但是当选择了十进制样式时,我想简单地禁用特殊字符属性,以便在选择不允许使用特殊字符的样式时无法设置它。
我如何实现这一目标?
感谢
答案 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 = ""; }
}