Formatowanie liczby podczas użytkownik wpisując w pracach ogólnych bardzo słabo. Powinieneś użyć MaskedTextBox do tego. Mnóstwo kodu w Internecie, który pokazuje, jak filtrować KeyPress, aby można było wprowadzać tylko cyfry. Większość z nich jest trywialnie pokonana za pomocą polecenia Wklej.
Sposobem rozsądnym jest traktowanie użytkownika zdolnego do podstawowych umiejętności, takiego jak wpisanie numeru, i delikatnie przypomnij jej, że źle zrobiła. Zdarzenie sprawdzania poprawności zostało wprowadzone w tym celu. Jest to również doskonały czas na sformatowanie numeru. Dodaj nową klasę do projektu i wklej ten kod:
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;
}
Skompiluj. Rzuć nową kontrolkę NumberBox z góry przybornika na formularz. Również upuść ErrorProvider na formularzu, więc błędy pisania można zgłaszać w skromny sposób, ustaw właściwość ErrorProvider nowego kontrolki. Opcjonalnie zmodyfikuj właściwość Fraction. Możesz subskrybować zdarzenie ValueChanged, aby wiedzieć, kiedy wartość została zmodyfikowana.
Gdyby to '' 100,000.00' 1,00,000.00' być może? – Neolisk