2011-06-22 74 views
2

ユーザーがリッチテキストボックスにテキストを入力するチャットアプリケーションを構築しています。RichTextBox C#キャレットの位置を設定する

リッチテキストボックスには、「Me:」という初期のテキストがあります。

ユーザーがホームボタンを押すと、「Me:」文字列の後ろにキャレットを配置します。だからシフト+ホームの組み合わせや、トリプルマウスのクリックやCtrl +左のカーソルなど。

どうにかできますか?

私はすでに事前に

[DllImport("user32.dll")] 
[return: MarshalAs(UnmanagedType.Bool)] 
static extern bool SetCaretPos(int X, int Y); 

おかげで、 オズを試してみました。

答えて

-1

は、それが財産にグーグルが見つかり

richTextBoxUserText.Text = INITIAL_TEXT; 
richTextBoxUserText.SelectAll(); 
richTextBoxUserText.SelectionColor = Color.Red; 
richTextBoxUserText.SelectionProtected = true; 
richTextBoxUserText.SelectionLength = 0; 
richTextBoxUserText.SelectionStart = richTextBoxUserText.TextLength + 1; 
+0

@ozすでに言いました! –

+0

@David、テキストの削除を防止するソリューションは、SelectionProtectedプロパティを使用しています。ユーザーがそれを選択するのを防ぐために、追加の作業が必要です....あなたはどこでこれを教えましたか? –

+3

@os元の質問のどこにでもテキストを保護することは言及していません。また、私はかなり 'richTextBoxUserText.SelectionStart = richTextBoxUserText.TextLength + 1'はoutofrange例外をスローすると確信しています。 –

4

のWinforms:0

WPFにRichTextBox.SelectionStart &セットRichTextBox.SelectionLength:RichTextBox.CaretPosition

+0

おかげで、それは今に見えます! ;-) –

+0

実際には、編集を終えた後、私はあなたがすでに投稿しているのを見ました。 – RvdK

7

あなたは、リッチテキストボックスのSelectionStartSelectionLength性質を持つキャレット位置を設定することができます。 SelectionLengthを0に設定し、キャレットを表示する場所にSelectionStartを設定します。 SelectionStartため

ドキュメントは言う:

テキストがコントロールで選択されていない場合、このプロパティは新しいテキストのために、挿入ポイント、またはキャレットを示します。


Win32 API関数SetCaretPosは、ニーズのためにあまりにも低レベルです。

4

使用をSelectionProtected Select方法:私はあなたの答えをコピーしたように、猶予期間に

public void Select(
    int start, 
    int length 
) 

richTextBoxUserText.Select(richTextBoxUserText.TextLength, 0); 
+0

+1これは私のアプローチよりもきれいに感じます –

関連する問題