Zum Inhalt springen

C# Cursor in RichTextBox positionieren


daTom

Empfohlene Beiträge

Hallo zusammen,

ich versuche gerade einen kleinen Messenger in C# zu implementieren.

Hierbei benutze ich 2 RichTextBoxen

Die eine ist zum Anzeigen der ankommenden Nachrichten und ist ReadOnly.

In der anderen werden natürlich dann die Nachrichten eingegeben.

Nachdem eine Nachricht geschrieben worden ist und diese abgesendet wird, leere ich die Box, damit der alte Kram nicht mehr im Eingabefenster steht.

Allerdings ist der Cursor nun jedes mal eine Zeile tiefer, also befindet der sich in der zweiten Zeile.

Ich hätte aber gerne, dass der Cursor am Anfang der TextBox steht, nachdem ich die Nachricht geschickt hab.

Hat da jemand eine Idee zu wie ich das lösen könnte?

Ich habs schon so versucht, allerdings hat dies nix gebracht:

           

            richTextBox1.SelectionStart = richTextBox1.TextLength -   richTextBox1.TextLength;

            richTextBox1.Focus();

            richTextBox1.ScrollToCaret();

Gruss

Link zu diesem Kommentar
Auf anderen Seiten teilen

Die wird nach dem speichern des enthaltenen Textes geleert.

string text = sendBox.Text;

sendBox.Clear();

sendBox.ScrollToCaret();            

Dies geschiet ganz am Anfang einer Funktion die aufgerufen wird, wenn man den eingegebenen Text absenden möchte.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also die Funktion wird entweder ausgelöst, wenn der Sende-Button gedrückt wird oder wenn im Textfeld Ctrl+Enter gedrückt wird.

Bei beiden Situationen wird die selbe Funktion aufgerufen.

In der Funktion selber hol ich, wie oben im Code, den Text aus der Textbox raus und speichere den in einen String.

Danach versuche ich halt den Cursor wieder an den Anfang der Textbox zu setzen, was mir ja allerdings nicht gelingt, da er sich bei beiden Möglichkeiten etwas zu senden(also Button oder Shortcut) so verhält.

An keiner anderen Stelle im Code benutze ich noch diese sendBox. Das ist die einzige Stelle im Code.

Die Funktion, in der das geschiet, wird nach dem Senden über das Netzwerk wieder verlassen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich kann das hier nicht reproduzieren. Nach Clear ist die Box leer, das Caret steht links oben in der Ecke. Wenn das bei dir nicht der Fall ist, liegt es vermutlich daran, dass du irgendwann nach dem Löschen irgendwas in die Box einträgst.

Greifst du sonst noch wo auf die Eingabebox zu?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Kann es sein dass mein Eventhandler, der strg+enter abfängt vielleicht dafür verantwortlich ist?

Hier mal der Code


        private void sendBox_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)

        {

            if (e.KeyCode == Keys.Enter && e.Control)

            {

                sendMessage();

            }


            if ((e.Alt) && (e.KeyCode == Keys.F4))

            {                

                tcpclient.Close(); 

                Application.Exit();

            }

        }

Die Funktion sendMessage verschickt die Nachricht halt an den Server und dort wird auch das Clear auf mein sendBox gemacht.

@Klotzkopp

Machst du auch lediglich die beiden Sachen Clear() und ScrollToCaret()?

Oder hab ich vielleicht ne Kleinigkeit vergessen?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Kann es sein dass mein Eventhandler, der strg+enter abfängt vielleicht dafür verantwortlich ist?

Ja. Du fängst Strg+Enter ab, und bevor der Tastendruck verarbeitet werden kann, verschickst du die Daten und leerst die Box. Dann wird der Tastendruck weiterverarbeitet. Und Strg+Enter erzeugt eine neue Zeile in deiner Eingabebox.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ok mit anderen Worten muss ich die ganze Clear Geschichte im Event-Handler bearbeiten und aus der Funktion rausnehmen?!
Nein, das bringt auch nichts. Wenn du Strg-Enter zum Senden benutzen willst, musst du dafür sorgen, dass bei Strg-Enter keine Zeile eingefügt wird. Das Event darf also nicht weiter verarbeitet werden:

if (e.KeyCode == Keys.Enter && e.Control)
{
sendMessage();
e.Handled = true;
}[/code]

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich versuch gerade das KeyPress Event in Visual Studio 2005 zu programmieren.

Hier gibt es bei der Klasse KeyPressEventArgs gar keine KeyCode Methode mehr, sondern nur noch KeyChar.

Wenn ich den Keys-Wert nach Char konvertiere funktioniert das auch, allerdings nicht bei der Ctrl-Taste.

Hat da schon jemand Erfahrung mit gemacht oder hat ne Idee?

Ein

if(e.KeyChar == (char)Keys.Control)

{

      //.....

}

hat leider keinen Effekt.

Bis jetzt wird die Ctrl-Taste einfach ignoriert.

Gruss

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...