2017-12-03 282 views
0

我正在编写一个NumberTextbox,它扩展了Winforms的标准Textbox类。该类包含Text属性的以下覆盖:自定义TextBox与检查文本属性的错误

[DefaultValue("")] 
    public override string Text 
    { 
     get 
     { 
      return base.Text; 
     } 

     set 
     { 
      if (!IsNumber(value)) 
       throw new FormatException(); 
      base.Text = value; 
     } 
    } 

构造函数确实在Text属性中显式插入了一个空字符串。当我尝试使用设计器将此文本框插入表单时,我得到FormatException。用return;代替罚球线可以解决这个问题,但这在我看来是错误的。有没有更好的解决这个问题?请注意,IsNumber方法确实会为空字符串返回true

+0

请将'IsNumber'实现添加到问题 – styx

+0

你可以考虑阅读这个问题[如何仅编号的文本框](https://stackoverflow.com/questions/463299/how-do-i-make-a -textbox-that-only-accepts-numbers) – lamandy

+0

你可能想检查答案[这里](https://stackoverflow.com/questions/1166226)以掩饰设计模式(接受的答案可能不适用于你的情况,所以要注意,其他答案为不同情况提供解决方案)。或者在你的构造函数中设置'base.Text'而不是'Text'属性。 – rene

回答

0

不确定为什么您的IsNumber方法在设计模式下无法正常工作。解决这一问题的简单方法是不调用该方法,如果你是在设计模式...

 set 
     { 
      if (!DesignMode && !IsNumber(value)) 
       throw new FormatException(); 
      base.Text = value; 
     } 

设计师的作品以神秘的方式决定一切执行。所以偶尔你需要测试设计模式,以保持它的工作体验。