【发布时间】:2013-08-26 22:08:23
【问题描述】:
我有一个包含多行文本的富文本框,在“单击”部分文本时,我想推断已单击的文本行,然后将其写入到另一个窗口进行更多处理 - 我遇到的问题是,在某些情况下,以下代码会引发 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];
任何提示或建议将不胜感激。谢谢各位。
【问题讨论】:
-
你有
Lines的长度和TargetLine的值导致问题吗? -
我已经检查了几次 Penguin,当抛出异常时,这两个数字显然不平衡,但我不确定这怎么可能案例 - 我想这是更多的问题......
-
在大多数情况下,我注意到 TargetLine 比行数高一;遇到异常时。
-
这对我来说似乎是合乎逻辑的;这两个操作背后的代码基于相同的逻辑——至少在确定文本中有多少行的意义上......
标签: c# richtextbox indexoutofboundsexception