RichTextBox automatisches Scrollen


flasherMX

Mitglied
Hallo,

ich hab folgendes PRoblem:

Meine RichTextBox dient als Element für einen Chat. Nun soll, wenn der Text, den ich in das Element reinlade länger wird als die RTB ist, diese automatisch runterscrolled und mir den letzten Eintrag anzeigt.

Wie geht das? (ScrollToCaret?!)

mfg flasherMX
 

JJB

Cogito ergo brumm
Wie genau lautet der Befehl (mit Syntax) zum Fokusieren auf das letzte Zeichen in der RTB ?

Jemand eine Ahnung ?

MfG JJB
 
Zuletzt bearbeitet:

moson

Mitglied
Ich brauche das bei einer TextBox, ist denke ich mal nicht viel anders.
Wie meinste das mit dem "focus" ? Kannst ma Quellcode posten?
 

JJB

Cogito ergo brumm
Wie kann ich bei einem Event XY oder per Befehl den Curosr ans ende der RTB setzen ? Da gibt's doch sicherlich einen Befehl, oder ?
 

Swebble

Mitglied
Ich würde einfach zählen wieviel Zeichen drinnen sind.
Dann setzt man den Eingabefokus auf das Steuerelement, also die RTB oder die TB, und selektiert einfach den letzten Index. Also das Zeichen nach dem letzten Buchstaben. Ich such mal nach nem Codebeispiel....


Ok ich hab was gefunden:

Code:
private void HelpLexDialog_Load(object sender, System.EventArgs e)
{
	if((path != null) && (path != ""))
	{
		this.oldPath.Text = path;
		this.oldPath.SelectionStart = path.Length;
	}
}
Der Code macht was ähnliches. Er setzt den Text der Textbox auf "path" und mit SelectionStart wird wie gesagt der Cursor ans Ende gesetzt, weil der Zeichenindex der TextBox 0-basiert ist.
 

JJB

Cogito ergo brumm
Das funktioniert nicht. Es passiert nichts. Gibt es denn keinen Befehl in C# der das einfach tut ?
Manuelles setzen des Cursors wäre ja auch ok, aber das geht auch nicht.
 

Xo-mate

Erfahrenes Mitglied
Also der gode ist:
Code:
 textBox1.SelectionStart = textBox1.TextLength; 
			textBox1.Focus(); 
			textBox1.ScrollToCaret();
Allerdings ist der Focus dannach auf der (rich)TextBox, was man ja aber wieder ändern kann....
 
Zuletzt bearbeitet:

Rippa_HD

Mitglied
Die einzige Methode zum nach unten Scrollen ohne Focus is über Windows API

Code:
using System.Runtime.InteropServices;

[...]

//WinAPI-Deklaration für SendMessage
[DllImport("user32.dll")]
public static extern IntPtr SendMessage(
   IntPtr window, int message, int wparam, int lparam);

//Was soll er machen
const int WM_VSCROLL = 0x115;
//Wohin soll er scrollen
const int SB_BOTTOM = 7;


private void button1_Click(object sender, System.EventArgs e)
{
   for (int i = 0; i < 100; i++)
   {
     //Machen wir ein wenig Text rein
     richTextBox1.Text += "Hallo Welt ";
   }
   //Ans Ende scrollen, ohne Focus
   SendMessage(richTextBox1.Handle, WM_VSCROLL, SB_BOTTOM, 0);
}
Hab ich ausm Microsoft Forum. Ich habs nicht ausprobiert wenns nicht geht muss ich mal bei meinem eigenen code nachgucken ob die zahlen auch stimmen