2017-12-03 12 views
0

私はNumberTextboxを作成していますが、これはWinformsの標準Textboxクラスを拡張しています。クラスには、Textプロパティに次のオーバーライドが含まれます。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)でご検討ください。 – lamandy

+0

デザインモードであることをカバーするために、[ここ](https://stackoverflow.com/questions/1166226)の回答を確認したい場合があります(受け入れられた回答は、あなたのシナリオ、それに注意してください、他の答えは異なる文脈に解決策を提供します)。代わりに 'Text'プロパティの代わりに' base.Text'をコンストラクタに設定してください。 – rene

答えて

0

IsNumberメソッドがデザインモードで正しく機能しない理由がわかりません。これに対処するための簡単な方法は、

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

設計者は、その不思議を実行するには神秘的な方法で動作します...あなたは、デザインモードである場合、メソッドを呼び出すことではないことです。時には、自分の経験で動作させるためにデザインモードをテストする必要があります。

関連する問題