我正在寻找一种在富文本框中选择两行(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
这段代码起初工作得很好,但我注意到过了一会儿'开始显示结果。
我做了进一步的测试,线条是正确的(即,参考正确的位置),而“选择”没有选择整个部分或不正确(选择不需要的部分)
(最后一部分我用谷歌翻译)
编辑:
想象一下这段文字:
你好
世界|| 点这里(第 1 行)
伙计们!
这
是
一个|| B点这里(5号线)
线
我需要选择(不获取文本)此文本:
世界
大佬!
这
是
一个
在富文本框中。
示例图像:
情况1:
案例二:
这就是我想要的,也是我发布的代码所做的,但过了一段时间,代码开始出现错误,正如我上面所说的(在开始时)。
编辑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;
}
但现在代码并非在每种情况下都有效..无论如何这里是使用旧代码的错误案例屏幕(问题开头发布的代码)
(来源:site11.com)
它从第一个{但没有到达最后一个}中选择(我在这里做了一些检查,问题是减法而不是行数。)
编辑 3:
我准备好了对不起varocarbas,我想我只是浪费了你的时间..看到我的屏幕后我注意到问题可能是我试图禁用它的自动换行,现在看来工作正常..对不起你的时间。