2016-08-20 6 views
0

Ich habe zwei verwandte Probleme, brauchen Sie Ihre Hilfe, um herauszufinden.Zurück Cursor an den Anfang des Textfelds nach dem Treffer auf Enter, um Zeilenumbrüche zu vermeiden und Leerraum zu vermeiden

In meinem Programm schreibe ich die beliebige Phrase in textBox1, dann drücke ich die Eingabetaste auf meiner Tastatur und sehe diesen Text in der textBox2.

aber wenn ich die meine Phrase drücken Sie die Eingabetaste in textBox2 zu zeigen, Cursor in textBox1 geht in die nächste Zeile und schafft Zeilenumbruch

Aber nach Hit eingeben und Reinigung, möchte ich den Cursor an den Anfang des textBox1 zurückzukehren.

Ich habe versucht, es so aus:

textBox1.Focus(); 
textBox1.Select(0, 0); 

und dies, aber nicht funktioniert für mich:

textBox1.Select(textBox1.Text.Length, 0); 

außer, dass ich den Cursor an den Anfang nur zurückkehren wollen, diese Zeile Pause verletzt die Reihenfolge in einem Textdokument, weil ich diese Zeilen in das Textdokument schreibe. Zeile für Zeile nach jedem Treffer bei Enter.

Zum Beispiel, wenn mit der Taste Verwendung ich diesen Auftrag in Folge habe:

phrase1 
phrase2 
phrase3 
... 

mit Enter habe ich diese:

phrase1 

phrase2 

phrase3 

Ich denke, dass die Lösung dieses Problems nicht lösen kann im Anschluss an einen, so wie sie verwandt sind, wäre es gut, auch diesen zu lösen, weil ich keine Ahnung habe, wie es geht.

Auch ich muss den Leerraum vermeiden, der am Ende der Zeile gelassen werden kann, bevor ich die Enter-Taste drücke. Es verletzt auch die Reihenfolge in meinem Textdokument. Ich will nicht den Ausdruck oder ein Wort mit white-space am Ende:

phrase1< without white-space 
phrase2 < with unwanted white-space at the end 
... 

hier:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 

namespace XXX_TEST 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
      ActiveControl = textBox1; 
     } 

     private void textBox1_KeyDown(object sender, KeyEventArgs e) 
     { 
      if (e.KeyCode == Keys.Enter) 
      { 
       textBox2.AppendText(textBox1.Text + "\n"); 
       textBox1.Text = ""; 
      } 

      } 
     } 
} 

EDIT:

Lösung mit String.TrimEnd() Funktion und e.SuppressKeyPress = true;:

using System; 
    using System.Collections.Generic; 
    using System.ComponentModel; 
    using System.Data; 
    using System.Drawing; 
    using System.Linq; 
    using System.Text; 
    using System.Threading.Tasks; 
    using System.Windows.Forms; 

    namespace XXX_TEST 
    { 
     public partial class Form1 : Form 
     { 
      public Form1() 
      { 
       InitializeComponent(); 
       ActiveControl = textBox1; 
      } 

      private void textBox1_KeyDown(object sender, KeyEventArgs e) 
      { 
       if (e.KeyCode == Keys.Enter) 
       { 
        textBox2.AppendText(textBox1.Text.TrimEnd() + "\n"); 
        textBox1.Text = ""; 
        e.SuppressKeyPress = true; 
       } 

       } 
      } 
    } 
+0

Könnten Sie bitte Ihre Frage umformulieren? Momentan verstehe ich überhaupt nicht, was Sie erreichen wollen. –

+0

@Visual Vincent hallo, fertig, hoffe jetzt besser –

+0

Also willst du 'TextBox1' grundsätzlich löschen, wenn der Benutzer Enter drückt? Du sagst, dass das Caret nicht zum Anfang zurückgeht, was ich nicht verstehe, denn wenn die TextBox keinen Text enthält, wird das Caret am Anfang sein. –

Antwort

0

Ich denke, ich sehe das Reaso n für deine ersten beiden Probleme. Wenn das Ereignis KeyDown ausgeführt wird, suchen Sie nach dem Schlüssel Geben Sie ein, und wenn es gedrückt wurde, führen Sie Ihre Aktionen aus und löschen Sie textBox1. Sie haben jedoch die Schlüsselmeldung, die an die TextBox übergeben wird, noch nicht beendet.

Das Problem ist, die e.SuppressKeyPress property auf true zu setzen, was dazu führen wird, dass der Schlüssel nicht an die TextBox übergeben wird, daher wird keine neue Zeile hinzugefügt.

Wie für Ihre dritte Anfrage über das Entfernen von abschließenden Leerzeichen müssen Sie nur die String.TrimEnd() function verwenden.

private void textBox1_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.Enter) 
    { 
     textBox2.AppendText(textBox1.Text.TrimEnd() + "\n"); //TrimEnd() removes trailing white-space characters. 
     textBox1.Text = ""; 
     e.SuppressKeyPress = true; //Do not pass the Enter key press onto the TextBox. 
    } 
} 
+0

Problem ist gelöst, große Unterstützung. Alles was ich brauche ist 'textBox2.AppendText (textBox1.Text.TrimEnd() +" \ n "); textBox1.Text = ""; e.SuppressKeyPress = true; ' –

+0

@MoIC: Ja, das ist alles was du brauchst (wenn es funktioniert hat). :) –

+0

ja funktioniert, habe ich obige lösung mit deiner hilfe bei gleichem beispiel hinzugefügt –

Verwandte Themen