Eto: [WPF] RichTextAreaの選択が正しく機能しない

作成日 2018年10月04日  ·  7コメント  ·  ソース: picoe/Eto

予想される行動

定義された範囲に従って正しく選択されたテキスト。

実際の動作

右側に5文字の置き忘れがあります。

問題を再現する手順

  1. RichTextAreaコントロールを作成します
  2. テキストを入力してください
  3. 選択範囲を定義してその色を設定します

問題を示すコード

rtfcontrol.Appen(initialtext, true);
rtfcontrol.Append(sometext, true);
rtfcontrol.Selection = new Range<int>(rtfcontrol.Text.Length - sometext.Length, rtfcontrol.Text.Length -1);
rtfcontrol.SelectionForeground = Colors.Blue;
rtfcontrol.Append("\n", true);
rtfcontrol.Selection = new Range<int>(rtfcontrol.Text.Length);

仕様

  • バージョン:2.5.0-ci-10013
  • プラットフォーム:WPF
  • オペレーティングシステム:Windows 10

WPF:

wpf

GTK2(Linux):

gtk2_linux

Xamarin.Mac:

xamarin mac

最も参考になるコメント

@DanWBR 、ああ、残念ながらそれはあなたが持っているようには機能しませんTextプロパティの最後に改行を追加します(テキストに改行があるかどうかは関係ありません)。 現時点ではそれを回避する方法は見つかりませんが、これとは別の問題です。

私がお勧めするのは、現在の位置を変数に保持し、テキストを追加した後にそれをインクリメントすることです。 長さを取得するためだけに毎回Textプロパティにアクセスすると、テキストが大きくなるにつれて速度が低下します。

全てのコメント7件

Windowsでは、行末文字はどういうわけか選択のインデックスにカウントされません。 私は現在、回避策として次のコードを使用しています。

private void Write(string message, Color c)
        {
            Append(message + Environment.NewLine, true);

            int idx = -1, last = -1;
            if (Environment.OSVersion.Platform == PlatformID.Unix)
            {
                idx = Text.LastIndexOf(message);
                last = Text.Length;
            }
            else
            {
                var lines = string.Join("", Text.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries));
                idx = lines.LastIndexOf(message);
                last = lines.Length;
            }

            if (idx == -1)
                return;

            Selection = new Range<int>(idx, idx + message.Length);
            SelectionForeground = c;
            Selection = new Range<int>(last, last);
        }

しかし、これは間違いなくバグです...

ええ、私は以前に@ManuelHuと同じハックを使用しました、それはきれいではありません。 大きなテキストで犬を遅くすることなく、これに効果的に対処する方法はまだわかりません。

問題を報告していただきありがとうございます。

ねえ@DanWBR

これは、最新の開発ブランチで修正する必要があります。 やってみませんか? すべてのプラットフォームで、改行は単一の\n文字として扱われるようになりました。

こんにちは@cwensley 、まだ修正する文字が1つ残っています:

captura de tela 2018-11-16 as 08 06 39

ねえ@DanWBR 、あなたは1つの問題によるオフの

https://github.com/DanWBR/dwsim5/blob/windows/DWSIM.UI.Desktop.Forms/Forms/Flowsheet/Flowsheet.eto.cs#L1245

たぶん私は間違ったインデックスを使用していますか? ただし、macOSとGTKでは機能します。

@DanWBR 、ああ、残念ながらそれはあなたが持っているようには機能しませんTextプロパティの最後に改行を追加します(テキストに改行があるかどうかは関係ありません)。 現時点ではそれを回避する方法は見つかりませんが、これとは別の問題です。

私がお勧めするのは、現在の位置を変数に保持し、テキストを追加した後にそれをインクリメントすることです。 長さを取得するためだけに毎回Textプロパティにアクセスすると、テキストが大きくなるにつれて速度が低下します。

このページは役に立ちましたか?
0 / 5 - 0 評価