daTom Geschrieben 22. Mai 2006 Teilen Geschrieben 22. Mai 2006 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Trux Geschrieben 22. Mai 2006 Teilen Geschrieben 22. Mai 2006 richTextBox1.TextLength - richTextBox1.TextLength ist das nicht immer 0?? Redest du über den Cursor von der Eingabe oder der Ausgabe-Box? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
daTom Geschrieben 23. Mai 2006 Autor Teilen Geschrieben 23. Mai 2006 Ich rede von der Eingabe. Mit richtextbox.SelectionStart = 0; hab ich es auch schon vergeblich versucht. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 23. Mai 2006 Teilen Geschrieben 23. Mai 2006 Wie leerst du denn die Box? Denn wenn sie leer wäre, dürfte das Caret nicht in der zweiten Zeile stehen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
daTom Geschrieben 23. Mai 2006 Autor Teilen Geschrieben 23. Mai 2006 Ich hab es zuletzt mit folgendem Code probiert richtextbox.Clear(); richtextbox1.ScrollToCaret(); Gruss Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 23. Mai 2006 Teilen Geschrieben 23. Mai 2006 Dank der genialen Variablennamen habe ich noch leichte Verständnisprobleme. Welche ist die Eingabe- und welche die Ausgabebox? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
daTom Geschrieben 23. Mai 2006 Autor Teilen Geschrieben 23. Mai 2006 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 23. Mai 2006 Teilen Geschrieben 23. Mai 2006 Und wann leerst du die Eingabebox? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
daTom Geschrieben 23. Mai 2006 Autor Teilen Geschrieben 23. Mai 2006 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 23. Mai 2006 Teilen Geschrieben 23. Mai 2006 Und wann wird das ausgelöst? Hast du einen Senden-Button, oder fängst du die Eingabetaste ab? Lass' dir doch nicht alles so aus der Nase ziehen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
daTom Geschrieben 23. Mai 2006 Autor Teilen Geschrieben 23. Mai 2006 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 23. Mai 2006 Teilen Geschrieben 23. Mai 2006 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? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
daTom Geschrieben 23. Mai 2006 Autor Teilen Geschrieben 23. Mai 2006 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? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 23. Mai 2006 Teilen Geschrieben 23. Mai 2006 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
daTom Geschrieben 23. Mai 2006 Autor Teilen Geschrieben 23. Mai 2006 Ok mit anderen Worten muss ich die ganze Clear Geschichte im Event-Handler bearbeiten und aus der Funktion rausnehmen?! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 23. Mai 2006 Teilen Geschrieben 23. Mai 2006 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] Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
daTom Geschrieben 23. Mai 2006 Autor Teilen Geschrieben 23. Mai 2006 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
grueni Geschrieben 23. Mai 2006 Teilen Geschrieben 23. Mai 2006 Was spricht dagegen, KeyDown zu verwenden? Da hast du doch alles, was du brauchst! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
daTom Geschrieben 24. Mai 2006 Autor Teilen Geschrieben 24. Mai 2006 Ja es lag daran, dass ich aus versehen ein anderes Event genommen habe. Danke gruenni Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.