我有一个带有多行文本的富文本框,在“点击”文本的一部分后,我想要推断已经点击的文本行,并将其写入到另一个窗口进行更多处理 - 我遇到的问题是,在某些情况下,下面的代码抛出一个IndexOutOfRangeException,我认为这是不可能从我微薄的观点......我会假设GetLineFromCharIndex之间会有互通性()和RichTextBox.Lines;特别是在使用其他'包容性'变量时,例如'SelectionStart'。
至少在一种情况下,当文本后面有一个空行时点击我的“最后一行”文本(使其实际上不是最后一行......)会抛出异常。
void OutputField_SelectionChanged(object sender, EventArgs e)
{
try
{
if (!this.LineEditor.Visible)
this.LineEditor.Show();
if (this.OutputField.SelectionStart == this.OutputField.TextLength)
return;
int TargetLine = this.OutputField.GetLineFromCharIndex(this.OutputField.SelectionStart);
String LineText = this.OutputField.Lines[TargetLine];
this.LineEditor.SetContent(TimeSpan.Zero, TimeSpan.Zero, LineText);
return;
}
catch (Exception ex)
{
}
}
具体而言;我发现例外情况的行如下:
String LineText = this.OutputField.Lines[TargetLine];
任何提示提示或建议将不胜感激。谢谢大家。
答案 0 :(得分:1)
看起来GetLineFromCharIndex()
会返回屏幕上显示的实际行,如果Lines[]
处于启用状态,则不一定是WordWrap
的索引。请关闭WordWrap
,看看它是否按预期工作。