2008-09-16 12 views

答えて

8

"NumericUpDown"コントロールを見てください。それは範囲のバリデーションを持っています、入力は常に数値であり、それらはきれいなインクリメント/デクリメントボタンを持っています。

0

通常のテキストボックスとValidatorコントロールを使用して入力を制御できます。

+0

ASP.Netのみ。彼はMFCの開発者だった場合、彼はおそらくwinformsを考えている。 –

0

エラープロバイダーコントロールを使用してテキストボックスを検証してみてください。 int.TryParse()またはdouble.TryParse()を使用して数値であるかどうかを確認し、範囲を検証できます。

0

あなたがそうでなければ上記の勧告は良いですが、あなたが希望の場合は、通常のテキストボックスでそれを取得します(整数に設定オペレータとタイプのためDataTypeCheckに設定)のRequiredFieldValidatorとこのCompareValidatorの組み合わせ

を使用することができます。

1

数字、整数、または実数しか受け入れないコントロールを実装する必要がありました。 私はTextBoxコントロールの特殊化(読み込み:派生)コントロールを構築し、入力コントロールと正規表現を使用して検証を行います。 範囲の検証を追加するのは非常に簡単です。

これは、正規表現を構築するためのコードです。 _numericSeparationは、小数点にカンマが (例えば、A値として受け入れ文字の文字列であるか、A「」「」:$ 10.50 10,50€

private string ComputeRegexPattern() 
{ 
    StringBuilder builder = new StringBuilder(); 
    if (this._forcePositives) 
    { 
     builder.Append("([+]|[-])?"); 
    } 
    builder.Append(@"[\d]*(("); 
    if (!this._useIntegers) 
    { 
     for (int i = 0; i < this._numericSeparator.Length; i++) 
     { 
      builder.Append("[").Append(this._numericSeparator[i]).Append("]"); 
      if ((this._numericSeparator.Length > 0) && (i != (this._numericSeparator.Length - 1))) 
      { 
       builder.Append("|"); 
      } 
     } 
    } 
    builder.Append(@")[\d]*)?"); 
    return builder.ToString(); 
} 

正規表現は、任意の数(すなわち、数値で任意の文字列に一致します文字の先頭に '+'または ' - 'のオプション文字が1つしかない場合 正規表現を作成したら(コントロールをインスタンス化するとき)、値が正しいかどうかをチェックします(ValidationErrorパブリックプロパティで設定された)エラープロバイダをアクティブにし、ValidationErrorイベントを発生させます。 CheckValidNumber()は、導入されたテキストにRegexを適用するだけです。ここで、照会を行い、番号が再入荷された範囲内にあるかどうかを知ることができます。

private bool CheckValidNumber() 
{ 
    if (Regex.Match(this.Text, this.RegexPattern).Value != this.Text) 
    { 
     this._errorProvider.SetError(this, this.ValidationError); 
     return false; 
    } 
    this._errorProvider.Clear(); 
    return true; 
} 

protected override void OnValidating(CancelEventArgs e) 
{ 
    bool flag = this.CheckValidNumber(); 
    if (!flag) 
    { 
     e.Cancel = true; 
     this.Text = "0"; 
    } 
    base.OnValidating(e); 
    if (!flag) 
    { 
     this.ValidationFail(this, EventArgs.Empty); 
    } 
} 

私が言ったように、私もONKEYPRESS methdodをオーバーライド数値characteres以外のテキストボックスに入力されたデータからユーザーを防ぐために:

protected override void OnKeyPress(KeyPressEventArgs e) 
{ 
    if ((!char.IsDigit(e.KeyChar) && !char.IsControl(e.KeyChar)) && (!this._numberSymbols.Contains(e.KeyChar.ToString()) && !this._numericSeparator.Contains(e.KeyChar.ToString()))) 
    { 
     e.Handled = true; 
    } 
    if (this._numberSymbols.Contains(e.KeyChar.ToString()) && !this._forcePositives) 
    { 
     e.Handled = true; 
    } 
    if (this._numericSeparator.Contains(e.KeyChar.ToString()) && this._useIntegers) 
    { 
     e.Handled = true; 
    } 
    base.OnKeyPress(e); 
} 

エレガントなタッチ:すべての番号が有効な場合、私は確認してくださいユーザがキーを離すときに、ユーザは彼/彼女がタイプするときにフィードバックを得ることができる。 (ただし、ValidationFailイベントには注意する必要があります)。

protected override void OnKeyUp(KeyEventArgs e) 
{ 
    this.CheckValidNumber(); 
    base.OnKeyUp(e); 
} 
関連する問題