我正在寻找一种方法来在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
示例图片:
案例1:
案例2:
这就是我想要的以及我发布的代码所做的事情,但过了一段时间,代码开始出现错误,就像我上面所说的那样(在开始时)。
编辑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>
答案 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"