4

WPF .NET 4 C#RichTextBoxを使用していて、そのテキストボックス内の特定の文字を他の文字に置き換えたいのですが、これはKeyUpイベントで発生します。

私が達成しようとしているのは、頭字語を完全な単語に置き換えることです。例:
pc=パーソナルコンピューター
sc=スタークラフト
など...

私はいくつかの同様のスレッドを調べましたが、私が見つけたものはすべて私のシナリオでは成功していません。

最終的には、頭字語のリストを使用してこれを実行できるようにしたいと思います。ただし、1つの頭字語を置き換えるだけでも問題が発生します。誰か助けてもらえますか?

4

1 に答える 1

2

System.Windows.Controls.RichTextBoxその値を検出するためのプロパティがないためText、次を使用してその値を検出できます。

string _Text = new TextRange(richTextBox1.Document.ContentStart, richTextBox1.Document.ContentEnd).Text;

次に、_Text次を使用して新しい文字列を変更して投稿できます

_Text = _Text.Replace("pc", "Personal Computer");
if (_Text != new TextRange(richTextBox1.Document.ContentStart, richTextBox1.Document.ContentEnd).Text)
{
new TextRange(richTextBox1.Document.ContentStart, richTextBox1.Document.ContentEnd).Text = _Text;
}

だから、このようになります

string _Text = new TextRange(richTextBox1.Document.ContentStart, richTextBox1.Document.ContentEnd).Text;
_Text = _Text.Replace("pc", "Personal Computer"); // Replace pc with Personal Computer
if (_Text != new TextRange(richTextBox1.Document.ContentStart, richTextBox1.Document.ContentEnd).Text)
{
new TextRange(richTextBox1.Document.ContentStart, richTextBox1.Document.ContentEnd).Text = _Text; // Change the current text to _Text
}

備考:使用する代わりに、文字とその置換を保存するをText.Replace("pc", "Personal Computer");宣言することができますList<String>

例:

    List<string> _List = new List<string>();
    private void richTextBox1_TextChanged(object sender, TextChangedEventArgs e)
    {

        string _Text = new TextRange(richTextBox1.Document.ContentStart, richTextBox1.Document.ContentEnd).Text;
        for (int count = 0; count < _List.Count; count++)
        {
            string[] _Split = _List[count].Split(','); //Separate each string in _List[count] based on its index
            _Text = _Text.Replace(_Split[0], _Split[1]); //Replace the first index with the second index
        }
        if (_Text != new TextRange(richTextBox1.Document.ContentStart, richTextBox1.Document.ContentEnd).Text)
        {
        new TextRange(richTextBox1.Document.ContentStart, richTextBox1.Document.ContentEnd).Text = _Text;
        }
    }

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        // The comma will be used to separate multiple items
        _List.Add("pc,Personal Computer");
        _List.Add("sc,Star Craft");

    }

ありがとう、
これがお役に立てば幸いです:)

于 2012-10-24T00:55:55.953 に答える