2013-07-21 15 views
6

In .NET, si può facilmente ottenere il numero di riga della posizione del cursore di un TextBox (cioè la "riga corrente") utilizzando GetLineFromCharIndex e SelectionStart:Impostazione riga corrente del cursore su un TextBox .NET

var currentLine = textBox1.GetLineFromCharIndex(textBox1.SelectionStart); 

Esiste un modo "pulito/nativo" per impostare il cursore su una riga specifica di un Textbox (cioè impostare la "riga corrente")? O almeno un modo "pulito/nativo" per ottenere l'indice char del primo carattere di una determinata linea (qualcosa come getCharIndexFromLine, l'opposto della funzione che ho messo prima)?

Un modo per farlo comporterebbe iterazione nei primi N-1 elementi della Lines proprietà del TextBox e sommando le lunghezze più le lunghezze dei linebreaks. Qualche altra idea?

risposta

4

C'è una funzione GetFirstCharIndexFromLine() che è disponibile:

risposta
int myLine = 3; 
int pos = textBox1.GetFirstCharIndexFromLine(myLine); 
if (pos > -1) { 
    textBox1.Select(pos, 0); 
} 
+1

+1 questo dovrebbe essere accettato. – Neolisk

+0

Non ho visto quella funzione: S Ora la mia domanda sembra sciocca. Comunque, grazie per l'aiuto! Questo è esattamente quello di cui avevo bisogno :) – Racso

1

Questo è stato il meglio che potevo venire con:

private void SetCursorLine(TextBox textBox, int line) 
{ 
    int seed = 0, pos = -1; 
    line -= 1; 

    if(line == 0) pos = 0; 
    else 
     for (int i = 0; i < line; i++) 
     { 
      pos = textBox.Text.IndexOf(Environment.NewLine, seed) + 2; 
      seed = pos; 
     } 

    if(pos != -1) textBox.Select(pos, 0); 
} 

Se si desidera iniziare a contare le linee a 0 rimuovere il segmento line -= 1;.

Problemi correlati