C# 用户控件自定义属性

3
我正在创建一个用户控件,为一系列文本框样式提供所有常见的验证功能:字母、数字、小数、社会安全号码等。因此,当使用此控件的开发人员选择字母样式时,他们还可以选择另一个属性,定义一串特殊字符,这些特殊字符也可以在验证期间被允许。
但是,例如选择小数样式时,我希望简单地禁用特殊字符属性,以便在选择不允许特殊字符的样式时,无法设置该属性。
如何实现这个目标?
谢谢

不确定如何工作,但也许有人可以解释一下控件的“扩展”属性,比如工具提示将一个属性添加到每个活动控件。我找不到一个好的例子,但你可以使用这种模式来动态地向你的控件添加属性。 - Mike
2个回答

2
您无法在C#中禁用属性 - 它们是类型接口的一部分,该接口承诺调用者可以在编译时绑定到这些操作。
最简单的实现方法是在用户指定不兼容样式时忽略特殊字符。这是.NET惯用的行为 - 例如,请参阅CompareValidator,它具有一些互斥的属性:
“不要同时设置ControlToCompare和ValueToCompare属性。您可以将输入控件的值与另一个输入控件或常量值进行比较。如果两个属性都设置了,则ControlToCompare属性优先。”
话虽如此,这种技术使类的使用比必要复杂 - 它们的接口并不能真正告诉您如何使用它们。我建议将验证器分成两个类:一个用于字母验证,一个用于数字验证。
或者,当样式不支持特殊字符时,您可以在setter中抛出异常。通常,这太过激烈,但它明确告诉客户端程序员他们做了一些无效的事情。

0
我会考虑在属性的setter中完成它。
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 = ""; }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接