【问题标题】:Inexplicable IndexOutOfRangeException莫名其妙的IndexOutOfRangeException
【发布时间】: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


【解决方案1】:

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

Reference

【讨论】:

  • 太棒了。我不知道 WordWrap 对这种情况有任何影响 - 我会试一试。谢谢。
  • 不用担心,很高兴我能帮上忙。至少前几次不赞成票让你从补偿赞成票中获得了一些代表 - 反对票是 -2 但赞成票是 +10
  • 哈哈好吧,我想接下来会发生什么 - 我必须记住将来更好地为我的帖子命名。再次感谢,这似乎是解决方案。
猜你喜欢
  • 2012-05-19
  • 2012-03-12
  • 2019-02-04
  • 2013-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-19
相关资源
最近更新 更多