0

我有一个包含多行文本的富文本框,在“单击”部分文本时,我想推断已单击的文本行,并将其写到另一个更多处理的窗口 - 我遇到的问题是,在某些情况下,以下代码会引发 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];

任何提示或建议将不胜感激。谢谢各位。

4

1 回答 1

1

它看起来像GetLineFromCharIndex()返回屏幕上显示的实际行,不一定是Lines[]if的索引WordWrap。试一试WordWrap,看看它是否按预期工作。

参考

于 2013-08-26T22:21:18.293 回答