2009-07-06 9 views
0

Complete Noob arbeitet an meiner ersten App in C#. Hier ist was ich versuche zu tun ....KeyDown/KeyPress und Indexierung

Ein Benutzer wird eine "ID" in ein Textfeld, alle Zahlen eingeben. Ich habe versucht, herauszufinden, wie ein zu stoppen Null in der ID führt, zum Beispiel:

5031 ist accepteble für ID 0827 nicht, was wir wollen

Grundsätzlich Null kann nicht die führende Zahl in der Reihe sein . Ich dachte, Perahps könnte über einen Index gefangen werden, aber ich bin ratlos. Irgendwelche Gedanken ????

-Confused Trapper

+0

Konnte 0 eine gültige ID sein, oder muss es 4 Ziffern (oder einen Bereich von Ziffern) sein? – SwDevMan81

+0

Vielen Dank für das Feedback bis jetzt, es war schon sehr hilfreich. Ich hätte feststellen sollen, dass der Bereich der ID offen ist. Es kann 3 Ziffern, 4, noch mehr sein. scwagner ... Ich möchte schwarz 0 als die führende Ziffer insgesamt so schnell wie möglich. – AvacadoRancher

Antwort

0
protected override void OnKeyDown(object sender, KeyEventArgs e) 
{ 
    e.Handled = ((this.SelectionStart == 0) && (e.KeyCode == Keys.D0)) 
} 
1

Wie wäre es so etwas wie ... brauchen kann es tweek.

protected override void OnKeyPress(KeyPressEventArgs e) 
{ 
    if(this.SelectionStart == 0 && e.KeyChar == (char)'0') 
    { 
     e.Handled = true; 
     return; 
    } 
} 
0

Ist es Ihr Wunsch, die 0 zu blockieren, wenn sie sie eingeben, oder die Validierung durchzuführen, nachdem sie vom Feld weg navigiert sind? Das Problem mit den Lösungen, die Tastatureingaben überwachen, besteht darin, dass sie den Inhalt nicht überwachen, wenn ein ungültiger Wert aus der Zwischenablage eingefügt wird.

Werfen Sie einen Blick auf MaskedTextBox und OnValidating innerhalb dieser Kontrolle und sehen, ob das Ihr Problem für Sie lösen wird.

0

Wenn Sie nur Zahlen in ein Feld eingeben möchten, verwenden Sie einfach NumericUpDown anstelle von TextBox. In Ihrem Fall scheint Ihre ID immer vierstellig zu sein. Legen Sie also den Mindestwert auf 1000 und den Maximalwert auf 9999 (oder größer oder auf Dezimal.MaxValue) fest.