令人费解的IndexOutOfRangeException

时间:2013-08-26 22:08:24

标签: c# richtextbox indexoutofboundsexception

我有一个带有多行文本的富文本框,在“点击”文本的一部分后,我想要推断已经点击的文本行,并将其写入到另一个窗口进行更多处理 - 我遇到的问题是,在某些情况下,下面的代码抛出一个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];

任何提示提示或建议将不胜感激。谢谢大家。

1 个答案:

答案 0 :(得分:1)

看起来GetLineFromCharIndex()会返回屏幕上显示的实际行,如果Lines[]处于启用状态,则不一定是WordWrap的索引。请关闭WordWrap,看看它是否按预期工作。

Reference