2016-09-01 1 views
-4

Wie kann ich gedrückten 'Dezimalpunkt' Schlüssel aus Numpad ersetzen, immer '.' unabhängig von regionalen Gegebenheiten. Ich will das funktioniert nur für eine (bestimmte) TextBox nicht alle in der Anwendung.
Es ist möglich, dies zu erreichen, ohne eigene Kontrolle zu erstellen?gedrückte Taste in TextBox zu einem anderen C ersetzen #

+0

Haben Sie irgendwas versucht? Eine Option wäre das Einfügen eines 'KeyPressed'-Ereignisses in die' Textbox', wo Sie die Taste, die gedrückt wurde, überprüfen und im Fall des Dezimalpunkts eine Aktion ausführen, die das '.' Zeichen in das Textfeld anstelle von ','. –

+0

Welche Bedeutung der regionalen Einstellung? –

+0

@BojanB Ich habe KeyDown, KeyUp, KeyPressed versucht. Für KeyDown, KeyUp können Sie den Charakter nicht ändern. In KeyPressed können Sie nicht bestimmen, Zeichen "," ging von Numpad oder Alfakeys – siwydym67

Antwort

2

Um dies zu tun, müssen Sie einfach das Ereignis KeyDown behandeln, drücken Sie die aktivierte Taste, wenn es das NUMPAD-Dezimal ist, und dann senden Sie einfach den neuen Schlüssel, den Sie wollen.

Es ist ziemlich einfach, die folgenden Links sollten Sie genügend Hinweise geben, um tatsächlich einen Code zu schreiben:

Sobald Sie‘ geschrieben etwas, du kannst Stellen Sie eine neue Frage zu spezifischen Schwierigkeiten, die Ihnen begegnen könnten.

1

Betrachten Sie this.

Sie können KeyDown Ereignis behandeln und wenn ist, auf Numpad Ereignis abbrechen und senden Sie neu mit '.'.

1

Dies ist eine mögliche Lösung (die meisten möglicherweise nicht die besten, aber eine, die funktionieren soll), die ein . Zeichen in eine Textbox, wenn die Dezimaltaste auf dem Numpad gedrückt hinzufügen würde, wenn die , Taste noch gedrückt wird Fügt der Textbox das Zeichen , hinzu.

private void textBox1_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.Decimal) 
    { 
    e.SuppressKeyPress = true; 
    textBox1.Text += "."; 
    textBox1.SelectionStart = textBox1.Text.Length; 
    textBox1.SelectionLength = 0; 
    } 
} 

Die SuppressKeyPress verhindert, dass die gedrückte Taste zu der Textbox gesendet wird. Dann fügen Sie dem Textfeld das gewünschte Zeichen hinzu. Die SelectionStart und SelectionLength Eigenschaften sind festgelegt, um den Cursor an das Ende der Zeichenfolge in dem Textfeld zu verschieben.

Hoffnung, die

EDIT hilft:

Wie cdkMoose wies darauf hin, den Fehler bei diesem Ansatz ist, dass der . Charakter immer bis zum Ende des Strings hinzugefügt wird, wenn es erwünscht ist, fügen Sie das . Zeichen irgendwo in der Zeichenkette ein, die der Code so verwendet werden könnte:

private void textBox1_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.Decimal) 
    { 
    e.SuppressKeyPress = true; 
    var caretPosition = textBox1.SelectionStart; 
    textBox1.Text.Insert(caretPosition , "."); 
    textBox1.SelectionStart = caretPosition + 1; 
    textBox1.SelectionLength = 0; 
    } 
} 
+1

Funktioniert nicht, wenn die Caret-Position nicht am Ende des Textes ist. Ich glaube, das gewünschte Ergebnis ist, eine Dezimalstelle unabhängig von der Position in der Textbox zu erzwingen – cdkMoose

+0

@cdkMoose Danke für das Hinzeigen, nicht aber darüber, ich modifizierte die Antwort und jetzt sollte dieser Fall auch abgedeckt werden –

+0

Sieht gut aus. Das sollte es abdecken. – cdkMoose

Verwandte Themen