2010-12-27 9 views
7

Possiedo un RichTextBox in un programma WInForms che include una riga che supera i 3.510 caratteri. Ho WordWrap impostato su false, quindi tutte le linee di quella lunghezza si estendono normalmente senza wrapping. Quello che facevo per aggirare questo era impostare RightMargin su un numero elevato come 100.000, che funziona ancora, ma ora che sono su Windows 7 e non su XP, ottengo una barra di scorrimento che scorre come se la casella di testo fosse linee di quella grande lunghezza, quando non lo fa..NET: Longline in RichTextBox Avvolto dopo 3.510 caratteri

Per replicare, è sufficiente creare un programma Winforms con un RichTextBox e un pulsante. In evento click del pulsante, inserire il seguente:

 StringBuilder sb = new StringBuilder(); 
     for (int i = 0; i < 3511; i++) 
      sb.Append('A'); 
     richTextBox1.Text = sb.ToString(); 

Dopo aver visto l'involucro, modificare il RightMargin della casella di testo a 100000, e notare la barra di scorrimento che appare ancor prima di eseguire il programma (solo il 7 e probabilmente Vista). La linea non si chiude più, ma voglio che la barra di scorrimento agisca solo sul testo nella casella e non su una lunghezza predeterminata.

+2

Non c'è un modo migliore per scuoiare questo gatto poi costringendo l'utente a scorrere così tanto per visualizzare i dati? –

+1

I repro. Sembra intenzionale, * molto * costoso da sistemare. –

+0

@Hans Sì, l'ho fatto così come appare in base alla dimensione del carattere ... è possibile ottenere più/meno del 3510 a seconda delle proprietà del carattere, in quanto è un valore difficile. –

risposta

7

È possibile impostare il rightmargin di richTextBox sulla larghezza della stringa? Ti piace questa

richTextBox1.RightMargin = 
TextRenderer.MeasureText(sb.ToString(), this.richTextBox1.Font).Width; 
+0

Grazie! Speravo in qualcosa di più di un'impostazione, ma posso scorrere ogni riga nella casella di testo, trovare la più lunga e impostare solo quella. –