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