C#を使用してWinForms TextBoxで指定された行にスクロールするにはどうすればよいですか?C#を使用してWinForms TextBoxの指定された行にスクロールする方法はありますか?
textBox.ScrollToCaret();
指定した行までスクロールするには、あなたは可能性がTextBox.Linesプロパティを通じてループの開始を見つけるために、それらの長さを合計:ここ
C#を使用してWinForms TextBoxで指定された行にスクロールするにはどうすればよいですか?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();
ルーピング答えが正しいキャレット位置を見つけるためには、問題のカップルを持っています。まず、大きなテキストボックスの場合、それは遅いです。第二に、タブ文字はそれを混乱させるようです。より直接的なルートは、必要な行のテキストを使用することです。
String textIWantShown = "Something on this line.";
int position = textBox.Text.IndexOf(textIWantShown);
textBox.SelectionStart = position;
textBox.ScrollToCaret();
このテキストはもちろん、一意である必要がありますが、textBox.Lines配列から取得できます。私の場合は、私が表示していたテキストに行番号を付加していたので、これで人生が楽になりました。
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();
}
これは私が見つけた最良の解決策である:それは選択とキャレット位置が変更されていないこと、利益を有する
const int EM_GETFIRSTVISIBLELINE = 0x00CE;
const int EM_LINESCROLL = 0x00B6;
[DllImport("user32.dll")]
static extern int SendMessage(IntPtr hWnd, int wMsg, int wParam, int lParam);
void SetLineIndex(TextBox tbx, int lineIndex)
{
int currentLine = SendMessage(textBox1.Handle, EM_GETFIRSTVISIBLELINE, 0, 0);
SendMessage(tbx.Handle, EM_LINESCROLL, 0, lineIndex - currentLine);
}
。
どのような種類のテキストボックス(ASP.NET、WinForms、WPF?)と「go to」とはどういう意味ですか?行全体を選択しますか?それを強制的に行にスクロールさせますか? –
WinForms ...指定された行にマウスを移動 – alinpopescu
TextBoxをどのように動かすか?私はプログラミングの初心者です質問を理解するために – alinpopescu