我有一个RichTextBox
,Multiline
设置为true
。它可以包含多个值,其中一些值太长并被拉伸成多行,但在RTB中被视为一行。
我试图选择整个值,但当文本被拉伸时,它总是只选择我单击的行。
下面是我使用的代码:
private void SelectLine(RichTextBox rtb)
{
if (rtb.Lines.Length != 0)
{
int firstcharindex = rtb.GetFirstCharIndexOfCurrentLine();
int currentline = rtb.GetLineFromCharIndex(firstcharindex);
string currentLineText = rtb.Lines[currentline];
rtb.Select(firstcharindex, currentLineText.Length);
}
}
我面临的问题是GetFirstCharIndexOfCurrentLine()
获取我点击进入的行中第一个字符的索引,而不是实际值的开始索引。但是,在Lines数组中,值表示为一行。
我如何修改这段代码来选择整个值,而不管它是如何在`RichTextBox中的多行上展开的?
1条答案
按热度按时间bq8i3lrv1#
TextBoxBase的Lines[]属性返回逻辑行(由换行符
\n
或回车符+换行符\r\n
分隔的文本行)。GetLineFromCharIndex()方法返回物理行(容器内的 Package 文本)。
如果你想选择包含插入符号的整个段落(逻辑行),你必须寻找它的边界,即
\n
字符。RichTextBox仅使用
\n
(当您添加/粘贴/设置包含任何字符的文本时,\r
字符将被删除),TextBox使用\r\n
。举例来说:
我使用
TextBoxBase
作为Type参数,因此您可以将此方法用于RichTextBox和TextBox(两者都派生自TextBoxBase
)。你可以把它变成一个扩展方法。顺便说一句,如果你正在使用,例如,按钮来调用这个方法,请记住将RichTextBox / TextBox的
HideSelection
属性设置为false
。