1


リッチテキスト ボックスで 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, 私はちょうどあなたの時間を無駄にしたと思います.. 私の画面を見た後、私は問題がワードラップである可能性があることに気付きました.

4

1 に答える 1