。そのためにMaskedTextBoxを使用する必要があります。インターネット上でKeyPressをフィルタリングする方法を示すたくさんのコードがあるので、数字だけを入力できます。そのほとんどは、[貼り付け]コマンドを使用することによって簡単に無効になります。
普通の方法は、数字を入力するなどの基本的なスキルができるユーザーを治療し、彼女が間違っていることを穏やかに思い出させることです。それに対してValidatingイベントが行われます。番号をフォーマットするのにも最適な時期です。プロジェクトに新しいクラスを追加し、次のコードを貼り付けます。
using System;
using System.ComponentModel;
using System.Windows.Forms;
public class NumberBox : TextBox {
public NumberBox() {
Fraction = 2;
}
public ErrorProvider ErrorProvider { get; set; }
[DefaultValue(2)]
public int Fraction { get; set; }
public event EventHandler ValueChanged;
public decimal Value {
get { return this.value; }
set {
if (value != this.value) {
this.value = value;
this.Text = Value.ToString(string.Format("N{0}", Fraction));
var handler = ValueChanged;
if (handler != null) ValueChanged(this, EventArgs.Empty);
}
}
}
protected override void OnValidating(CancelEventArgs e) {
if (this.Text.Length > 0 && !e.Cancel) {
decimal entry;
if (decimal.TryParse(this.Text, out entry)) {
if (ErrorProvider != null) ErrorProvider.SetError(this, "");
Value = entry;
}
else {
if (ErrorProvider != null) ErrorProvider.SetError(this, "Please enter a valid number");
this.SelectAll();
e.Cancel = true;
}
}
base.OnValidating(e);
}
protected override void OnEnter(EventArgs e) {
this.SelectAll();
base.OnEnter(e);
}
private decimal value;
}
コンパイル新しいNumberBoxコントロールをツールボックスの上部からフォームにドロップします。また、フォームにErrorProviderをドロップすることで、入力ミスを控えめに報告し、新しいコントロールのErrorProviderプロパティを設定することができます。オプションで、Fractionプロパティを変更します。 ValueChangedイベントを購読して、値がいつ変更されたかを知ることができます。
が、これは 'おそらく100,000.00''こと1,00,000.00'べきでしょうか? – Neolisk