从richtextbox中的A行到B行选择文本

时间:2013-07-12 12:08:07

标签: c# richtextbox


我正在寻找一种方法来在richtextbox中的两行(A和B)之间选择文本。 我试过这样的事情:

richTextBox1.Select
(
     richTextBox1.GetFirstCharIndexFromLine(parentesi_inizio[current_idx]),
     (
          richTextBox1.GetFirstCharIndexFromLine(parentesi_fine[current_idx]) -
          richTextBox1.GetFirstCharIndexFromLine(parentesi_inizio[current_idx]) + 1
     )
);

在parentesi_inizio和parentesi_fine里面我有行号,我应该从A行(parentesi_inizio)到B(parentesi_fine)中选择。

经过一些测试后,我认为问题是:

richTextBox1.GetFirstCharIndexFromLine(parentesi_fine[current_idx]) -
richTextBox1.GetFirstCharIndexFromLine(parentesi_inizio[current_idx]) + 1

这个代码最初工作正常,但我注意到一段时间后'开始显示结果stoner。

我做了进一步的测试并且线条是正确的(即,参考正确的位置),而“选择”不选择整个部分或不正确(选择不必要的部分)

(我在最后一部分使用谷歌翻译)

修改

想象一下这个文字:

  

你好   世界||这里有一点(第1行)
  伙计们!
  这个   是   a || B点在这里(第5行)
  第一行

我需要选择(不是文本)这个文本:

  

世界   伙计们!
  这个   是   a

在richtextbox中。

示例图片:

案例1:

enter image description here

案例2:

enter image description here

这就是我想要的以及我发布的代码所做的事情,但过了一段时间,代码开始出现错误,就像我上面所说的那样(在开始时)。

编辑2:

我在varocarbas回复后将代码更改为此

richTextBox1.Select (
richTextBox1.GetFirstCharIndexFromLine(parentesi_inizio[current_idx]),

richTextBox1.GetFirstCharIndexFromLine(parentesi_inizio[current_idx])
+ count_length(parentesi_inizio[current_idx], parentesi_fine[current_idx]) );

其中count_length是

private int count_length(int A, int B)
{
    // A => first line
    // B => last line

    int tot = 0;

    for (int i = A; i <= B; ++i)
    {
        // read the length of every line between A and B
        tot += richTextBox1.Lines[i].Length - 1;
    }

    // return it
    return tot;
}

但现在代码在每种情况下都不起作用..无论如何这里是使用旧代码(在问题开头发布的代码)的错误案例的屏幕

wrong http://picu.site11.com/images/6a70756e35233ae74a9f0722d553cb56a865ea03.png

它从第一个{但不到达最后}选择(我在这里做一些检查,问题是减法而不是行数。)

编辑3:

我已经准备好了抱歉varocarbas,我想我只是浪费你的时间..看到我的屏幕后我注意到问题可能是单词换行我试图禁用它,现在似乎工作正常..抱歉你的时间。< / p>

1 个答案:

答案 0 :(得分:2)

为什么不直接依赖lines[]数组?

string line2 = richTextBox1.lines[1];

请记住它有自己的索引,即获取第三行中的第一个字符:

int firstChar3 = richTextBox1.lines[2].Substring(0, 1);

要引用整个richTextBox索引系统,您还可以依赖GetFirstCharIndexFromLine。那就是:

int startIndexLine2 = richTextBox1.GetFirstCharIndexFromLine(1); //Start index line2
int endIndexLine2 = startIndexLine2 + richTextBox1.lines[1].length - 1; //End index line2

--------更新后的问题

很抱歉,但我看不到您提供的链接中的代码。但是下面的代码应该提供你想要的输出:

int curStart = richTextBox1.GetFirstCharIndexFromLine(2); 
richTextBox1.Select(curStart, richTextBox1.Lines[2].Length);
string curText = richTextBox1.SelectedText;  -> "Guys!"

curStart = richTextBox1.GetFirstCharIndexFromLine(3); 
richTextBox1.Select(curStart, richTextBox1.Lines[3].Length);
curText = richTextBox1.SelectedText;  -> "This"

curStart = richTextBox1.GetFirstCharIndexFromLine(4); 
richTextBox1.Select(curStart, richTextBox1.Lines[4].Length);
curText = richTextBox1.SelectedText;  -> "is"