TextBox
WPFの要素内の特定の行の先頭のカレットインデックスをプログラムで取得する方法はありますか?
たとえば、20行目を選択するには:
my_textbox.GetLineIndex(20);
この情報を取得して、これを値として使用できるようにしたいと思いmy_textbox.SelectionStart
ます。
ありますがmy_textbox.ScrollToLine(20)
、これは私が思わないインデックスを私に与えませんか?
組み込みの方法はないと思いますが、このような拡張方法を試すことができます。
public static int GetLineIndex(this TextBox textbox, int line)
{
var text = textbox.Text;
var thisLine = 0;
for (var i = 0; i < text.Length; i++)
{
if (thisLine == line)
return i;
if (text[i] == '\n')
++thisLine;
}
throw new ArgumentOutOfRangeException();
}
複数行のテキストボックスをボタンクリックするために使用できます
string findText = "sample";
int charIndex = txtSource.Text.IndexOf(findText);
MessageBox.Show(txtSource.GetLineFromCharIndex(charIndex).ToString());
or
MessageBox.Show(txtSource.GetLineFromCharIndex(txtSource.Text.IndexOf("sample")).ToString());
「GetCharacterIndexFromLineIndex」関数を使用するだけで、特定の行の先頭にあるカレットインデックスを取得できます。
この関数の詳細については、次のURLで確認できます。GetCharacterIndexFromLineIndexのMicrosoftドキュメント
これにより、必要に応じて行の先頭にあるカレットインデックスが返されます。
int startIndex = my_textbox.GetCharacterIndexFromLineIndex(lineNumber);