gpt4 book ai didi

来自 RichTextBox 的 c# WPF 行号和列号

转载 作者:太空狗 更新时间:2023-10-29 22:51:56 26 4
gpt4 key购买 nike

我正在将应用程序从 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);

最佳答案

这样的事情可能会给你一个起点。

TextPointer tp1 = rtb.Selection.Start.GetLineStartPosition(0);
TextPointer tp2 = rtb.Selection.Start;

int column = tp1.GetOffsetToPosition(tp2);

int someBigNumber = int.MaxValue;
int lineMoved, currentLineNumber;
rtb.Selection.Start.GetLineStartPosition(-someBigNumber, out lineMoved);
currentLineNumber = -lineMoved;

LineColumnLabel.Content = "Line: " + currentLineNumber.ToString() + " Column: " + column.ToString();

有几点需要注意。第一行将是第 0 行,因此您可能希望将 + 1 添加到行号。此外,如果换行,其初始列将为 0,但第一行和 CR 之后的任何行都会将初始位置列为第 1 列。

关于来自 RichTextBox 的 c# WPF 行号和列号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17994674/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com