C#を使用してWinForms TextBoxの指定された行までスクロールするにはどうすればよいですか?
ありがとう
選択範囲までスクロールする方法は次のとおりです。
textBox.ScrollToCaret();
指定した行までスクロールするには、TextBox.Linesプロパティをループし、長さを合計して指定した行の先頭を見つけ、TextBox.SelectionStartを設定してキャレットを配置します。
これに沿った何か(テストされていないコード):
int position = 0;
for (int i = 0; i < lineToGoto; i++)
{
position += textBox.Lines[i].Length;
}
textBox.SelectionStart = position;
textBox.ScrollToCaret();
private void MoveCaretToLine(TextBox txtBox, int lineNumber)
{
txtBox.HideSelection = false;
txtBox.SelectionStart = txtBox.GetFirstCharIndexFromLine(lineNumber - 1);
txtBox.SelectionLength = txtBox.Lines[lineNumber - 1].Length;
txtBox.ScrollToCaret();
}
適切なキャレット位置を見つけるためのループの答えには、いくつかの問題があります。まず、大きなテキストボックスの場合、速度が遅くなります。第二に、タブ文字はそれを混乱させるようです。より直接的なルートは、必要な行のテキストを使用することです。
String textIWantShown = "Something on this line.";
int position = textBox.Text.IndexOf(textIWantShown);
textBox.SelectionStart = position;
textBox.ScrollToCaret();
もちろん、このテキストは一意である必要がありますが、textBox.Lines配列から取得できます。私の場合、表示しているテキストの前に行番号を付けていたので、これで作業が楽になりました。