リッチテキスト ボックスで 2 行 (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
このコードは最初は問題なく動作しますが、しばらくすると「ストーナーの結果が表示され始める」ことに気付きました。
さらにテストを行ったところ、行は正しい (つまり、適切な場所を参照している) のに対し、「選択」は部分全体を選択しないか、間違って選択します (選択する必要のない部分を選択します)。
(最後の部分はGoogle翻訳を使いました)
編集:
次のテキストを想像してください。
ハロー
ワールド ||ハローワールド ここに A 点 (1 行目)
みんな!
これ
は
||です。Bポイントここ(5行目)
行
このテキストを選択する(テキストを取得しない)必要があります:
ワールド
ガイズ!
これ
は
_
リッチテキストボックスで。
画像例:
ケース 1:
ケース 2:
それが私が望むものであり、投稿したコードが何をするかですが、しばらくすると、上記で述べたようにコードがバグを起こし始めます(最初に)。
編集2:
バロカルバの返信後、コードをこれに変更しました
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, 私はちょうどあなたの時間を無駄にしたと思います.. 私の画面を見た後、私は問題がワードラップである可能性があることに気付きました.