Domanda

Sto lavorando su un'app in cui ho un sacco di testo in un RichTextBox. Sto saltando in varie posizioni all'interno del testo, (saltando ad un paragrafo arbitrario per esempio) che sembra funzionare mandando il cursore in quella posizione ma non riesco a controllare dove finisce il cursore.

A volte il cursore finisce nella parte superiore di RichTextBox e talvolta nella parte inferiore. Questo andrebbe bene se fossi interessato solo alla linea su cui si trova il cursore, ma sono interessato all'intero paragrafo. In realtà mi piacerebbe avere il cursore nel mezzo di RichTextBox ogni volta. A meno che il paragrafo non sia più lungo dell'area visualizzabile.

La mia domanda. C'è un modo per determinare l'area visualizzabile di un RichTextBox e quindi fare un calcolo su come posizionare correttamente il cursore? Se avessi quel valore, allora posso decidere se mettere il cursore in mezzo (e sapere dove si trova il centro) o in alto. Grazie per l'aiuto.

È stato utile?

Soluzione

Ho risolto questo problema. Un RichTextBox ha una proprietà VerticalOffset che, quando aggiunto alla posizione del puntatore di testo, ti darà l'offset effettivo.

Utilizzando l'offset è possibile utilizzare RichTextBox.ScrollToVerticalOffset per scorrere la casella in base alla proprietà RichTextBox.ActualHeight.

un esempio: supponiamo che io abbia un TextPoint pointer1 nella posizione in cui voglio scorrere

Rect thisposition = pointer1.GetCharacterRect(LogicalDirection.Forward);

richTextBox1.Focus();
richTextBox1.CaretPosition = pointer1;


double totaloffset = thisposition.Top + richTextBox1.VerticalOffset;
richTextBox1.ScrollToVerticalOffset(totaloffset - richTextBox1.ActualHeight / 2);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top