8

アプリケーションを WinForms から WPF に移植していますが、テキスト ボックス内の選択範囲の行番号と列番号を取得しようとして問題が発生しました。WinForms では非常に簡単に実行できましたが、WPF では RichTextBox を実装する方法がまったく異なるため、どうすればよいかわかりません。

これが私のWinFormsソリューションです

int line = richTextBox.GetLineFromCharIndex(TextBox.SelectionStart);
int column = richTextBox.SelectionStart - TextBox.GetFirstCharIndexFromLine(line);

LineColumnLabel.Text = "Line " + (line + 1) + ", Column " + (column + 1);

現在の選択範囲のインデックスを取得できないため、これは WPF では機能しません。

これが実用的なソリューションです:

int lineNumber;
textBox.CaretPosition.GetLineStartPosition(-int.MaxValue, out lineNumber);
int columnNumber = richTextBox.CaretPosition.GetLineStartposition(0).GetOffsetToPosition(richTextBox.CaretPosition);
if (lineNumber == 0)
    columnNumber--;

statusBarLineColumn.Content = string.Format("Line {0}, Column {1}", -lineNumber + 1, columnNumber + 1);
4

2 に答える 2