繁体   English   中英

C#UserControl自定义属性

[英]C# UserControl Custom Properties

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

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

我怎样才能实现这个目标?

谢谢

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

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

不要同时设置ControlToCompare和ValueToCompare属性。 您可以将输入控件的值与另一个输入控件进行比较,也可以将其与常量值进行比较。 如果同时设置了这两个属性,则ControlToCompare属性优先。

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

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

我会考虑在属性的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 = ""; }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM