C# Textbox Enter abfangen ohne Zeilensprung

Thaxll'ssillyia

Captain
Registriert
Dez. 2007
Beiträge
3.568
Hallo Community!

Ich hab ein Problem mit einer Textbox.
Wenn der Benutzer schreibt und dann Enter drückt, wird eine Methode aufgerufen.
Das mach ich so:

Code:
        private void richTextBox_MessageText_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                Methode();
            }
        }

Nur soll dabei kein Zeilensprung erfolgen. Wie kann ich das unterbinden?

Vielen Dank für Hilfe!

Gruß Thax
 
hab zwar keine Ahnung von C# aber kannst du nicht einfach in der if-bedingung, vor dem Aufrufen der Methode noch das Zeichen (zeilenumbruch und cr) raus löschen?
einfach mal nach dem ASCII-Zeichen für eine "Enter" suchen.

if foo=true
{
stringreplace von textbox;
methode();
}

oder so ähnlich ;)
 
1. Musst du eine KeyPress Methode anlegen und nicht KeyDown.
2. sollte es (e.KeyChar == '\r') sein (funktioniert bei mir so)

3. Ein Besipiel

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == '\r')
{
e.Handled = true; // Warntöne verhindern

Methode();
}
}


ich hoffe es hilft :)
 
Das ist eine noch elegantere Lösung, wenn das Zeichen dann nicht in der textBox landet?!
 
Da hast du zwei einfache Möglichkeiten:

1. Da du eine RichTextBox verwendest, kannst du einfach MultiLine auf false setzen, dann nimmt die kein Return an.
2. In deiner ursprünglichen KeyDown-Methode einfach e.Handled = true; setzen vor deinem Methodenaufruf, also so:

if (e.KeyCode == Keys.Enter)
{
e.Handled = true;
Methode();
}

Mit "\r" oder ählnichem brauchst du nicht zu hantieren, dafür gibt es die KeyCodes in .NET.
 
Zuletzt bearbeitet: (typo in Handled)
Ich mache es immer mit meiner Methode und hatte auch noch nie Probleme damit.
Und ob man die KeyCode oder die KeyChar methode verwendet ist ja auch egal ;)
Jeder wie er will
 
Viele Events finden in ner Reihenfolge statt, die werden "gebubblet" wie man so sagt ;)

Also es beginnt beim Tastendruck mit KeyDown, danach wird KeyPress verarbeitet und zu ende KeyUp (Taste ist nun losgelassen). Das gleiche Schema gilt für die Mouse Events.

Wie gesagt werden die Events nacheinander verarbeitet, allerdings kannst du irgendwo in der Abfolge sagen Event.Handled = true und somit werden in der Abfolge keine weiteren Events hochpropagiert.

Wenn du also im KeyDown e.Handled = true setzt, werden KeyPress und KeyUp nicht mehr vom System verarbeitet.

@Vista Visual: Klar kann man den Char Code verwenden, aber mit der Enumeration bist du auf der sicheren Seite. Zumal Keys.Enter intuitiver und verständlicher als "\r" ist.
 
Und wenn du trotzdem die Char Variante haben willst dann halt:

Code:
if(e.KeyChar == Convert.ToChar(Keys.Enter))
xD

Aber das würde ich nicht so gern machen wollen... ^^
 
Zurück
Oben