2016-05-18 16 views
-1

Ich möchte Textbox, die nur Zahlen und Komma akzeptieren sollte einschränken.Wie kann ich diesen Tastendruck ??TextBox akzeptiert nur numerische und Comm-C# Windows Forms

Beispiel:

1,2,223,222 -->Valid 
1,,22,,33 -->Invalid 
ab,c,d  -->Invalid 
+1

Lesen Sie über [MaskedTextBox] (https://msdn.microsoft.com/en-us/library/system.windows.forms.maskedtextbox (v = vs.110) .aspx) –

+1

Wenn Sie * validate * Eingabe, kann das Muster sein "" [0-9] + (, [0-9] +) * $ "' –

Antwort

2

Wenn Sie Eingabe überprüfen möchten, können Sie regulären Ausdruck verwenden:

String input = "1,2,223,222"; 
    String pattern = "^[0-9]+(,[0-9]+)*$"; 

    Console.Write(Regex.IsMatch(input, pattern) ? "valid" : "invalid"); 

Kleiner Test:

String[] tests = new String[] { 
    "1,2,223,222", 
    "1,,22,,33", 
    "ab,c,d", 
    }; 

    var report = tests 
    .Select(item => String.Format("{0,-12} --> {1}", 
            item, 
            Regex.IsMatch(item, pattern) ? "valid" : "invalid")); 

    // 1,2,223,222 --> valid 
    // 1,,22,,33 --> invalid 
    // ab,c,d  --> invalid 
    Console.Write(String.Join(Environment.NewLine, report)); 

Falls Sie möchte beschränken Eingang, bitte, denkt zweimal: was die richtige Vorgehensweise ist für Benutzer zur Eingabe, sagt

1,2 

mit Aufnahmebeschränkung nicht natürliche und selbstverständlich sein kann ein

"1" -> "1," (invalid! System prevents such an input) -> "1,2" 

aber seltsam

"1" -> "12" -> "1,2" 
So

Ich schlage vor, nachsichtig Benutzereingabesteuerung:

private void myControl_KeyPress(object sender, KeyPressEventArgs e) { 
    // temporary invalid inputs like "1," are allowed 
    if ((e.KeyChar < 32) || (e.KeyChar >= '0') && (e.KeyChar <= '9') || (e.KeyChar == ',')) 
    return; 

    // only evident errors (like 'A' or '&') are restricted 
    e.Handled = true; 
} 

und dann schließlich (auf OK klicken etc.) Validieren.

+0

Dmitry Bychenko .. Nur ein Problem mit dieser Lösung ist es wird nicht mit Folgekommas (zB; 1, , 2) – vmb

+0

@vmb: die Frage besagt, dass * folgende Kommas * ungültig sind *: '1,, 22,, 33 -> Ungültig (das zweite Beispiel aus der Frage). Wenn diese Eingaben tatsächlich gültig sind, bearbeiten Sie die Frage bitte. –

+0

@vmb: Für den Fall, dass Sie folgende Kommas * innerhalb * der Eingabe wie '1 ,,, 2' erlauben, aber nicht * dangling * (zB', 1' oder '2,') akzeptieren, dann kann das Muster ''^[0-9] | ([0-9] (, | [0-9]) * [0-9]) $ "' –