Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

C# Cursor in RichTextBox positionieren

Empfohlene Antworten

Veröffentlicht

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

richTextBox1.TextLength - richTextBox1.TextLength

ist das nicht immer 0??

Redest du über den Cursor von der Eingabe oder der Ausgabe-Box?

Ich rede von der Eingabe.

Mit richtextbox.SelectionStart = 0; hab ich es auch schon vergeblich versucht.

Ich hab es zuletzt mit folgendem Code probiert

richtextbox.Clear();

richtextbox1.ScrollToCaret();

Gruss

Sorry, richtextbox1 soll das Eingabe Feld sein.

Das Ausgabefeld ist eigentlich außen vor. Das ist sowieso nur ReadOnly und das verhält sich auch so wie ich es mir vorstelle.

Mein Problem ist also ausschließlich das Eingabefeld

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.

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.

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?

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?

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.

Ok mit anderen Worten muss ich die ganze Clear Geschichte im Event-Handler bearbeiten und aus der Funktion rausnehmen?!

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]

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

Ja es lag daran, dass ich aus versehen ein anderes Event genommen habe.

Danke gruenni

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.