1

現在、.NET4Windowsフォームアプリケーションを使用しています。

インテリセンスのようなものを作成しようとしていますが、非常に基本的です。

ユーザーがに焦点を合わせ、次のRichTextBoxように入力しているとします Search。この特定のフレーズの後、私はそれを次のように「自動入力」したいと思います:Search ""そして「」の間にカレットを置きます。

このように、ユーザーが入力を続けると、キャレットは次のように「」の間に留まります。

Search "[usertypinghere][caretposition]"

カレットの現在の位置を取得する方法はもちろん、そこに保持する方法もわかりません。

4

1 に答える 1

1

それSelectionStartは喜びです。それはTextBoxBaseの一部であるため、、、、、または他のカスタム派生物でさえもTextBox持つことができます。イベントをサブスクライブして「検索」を監視し、自動入力後にそこに設定してから、の方向転換を防ぐためにサブスクライブする必要があります。RichTextBoxMaskedTextBoxTextChangedSelectionStartSelectionChangedEventSelectionStart

ああ、そしてあなたがいくつかのキーワードを持っているなら、あなたはメソッドを一般化するためDictionaryにある種のそれらのキーワードを組み合わせたいと思うでしょう。Tuples

私のテストコードを編集します。ちらつきやオーバーライドコントロールはありません。単なるイベントサブスクライバー

private void richTextBox1_TextChanged(object sender, EventArgs e)
    {
        if (richTextBox1.Text == "Search")
        {
            richTextBox1.Text = "Search \"\"";
            richTextBox1.SelectionStart = richTextBox1.TextLength - 1;
        }

    }

    private void richTextBox1_SelectionChanged(object sender, EventArgs e)
    {
        if (richTextBox1.Text.StartsWith("Search \"") && richTextBox1.Text.EndsWith("\""))
        {
            if (richTextBox1.SelectionStart > richTextBox1.TextLength - 1)
            {
                richTextBox1.SelectionStart = richTextBox1.TextLength - 1;
            }
            if (richTextBox1.SelectionStart <= "Search \"".Length)
            {
                richTextBox1.SelectionStart = "Search\"".Length+1;
            }
        }
    }
于 2012-06-11T22:58:43.710 に答える