web-dev-qa-db-ja.com

テキストボックス内のカーソルの位置を見つけるにはどうすればよいですか? C#

標準のWinForms TextBoxがあり、テキスト内のカーソルの位置にテキストを挿入したい。カーソルの位置を取得するにはどうすればよいですか?

ありがとう

55
James May

テキストが選択されているかどうかに関係なく、 SelectionStart プロパティはキャレットが置かれているテキストのインデックスを表します。したがって、 String.Insert を使用して、次のようにテキストを挿入できます。

myTextBox.Text = myTextBox.Text.Insert(myTextBox.SelectionStart, "Hello world");
81
Matt Hamilton

SelectionStartTextBoxプロパティを確認します。

14
David Morton

ジェームズ、カーソル位置にテキストを挿入したいだけの場合、文字列全体を置き換える必要があるのはかなり非効率的です。

より良い解決策は次のとおりです。

textBoxSt1.SelectedText = ComboBoxWildCard.SelectedItem.ToString();

何も選択されていない場合、カーソル位置に新しいテキストが挿入されます。何かを選択している場合、これは選択したテキストを挿入したいテキストに置き換えます。

eggheadcafeサイト からこのソリューションを見つけました。

7
MaDDoG

あなたがしなければならないのはこれです:

ドキュメントのカーソル位置にテキストを挿入するアイテム(ボタン、ラベルなど)をダブルクリックします。次に、これを入力します。

richTextBox.SelectedText = "whatevertextyouwantinserted";
5
Patrick

これは、最後の有効な入力テキスト位置を復元して、数字のみを入力することを可能にする私の実際の実現です:

Xaml:

<TextBox
      Name="myTextBox" 
      TextChanged="OnMyTextBoxTyping" />

コードビハインド:

private void OnMyTextBoxTyping(object sender, EventArgs e)
{
    if (!System.Text.RegularExpressions.Regex.IsMatch(myTextBox.Text, @"^[0-9]+$"))
    {
        var currentPosition = myTextBox.SelectionStart;
        myTextBox.Text = new string(myTextBox.Text.Where(c => (char.IsDigit(c))).ToArray());
        myTextBox.SelectionStart = currentPosition > 0 ? currentPosition - 1 : currentPosition;
    }
}
3
Fragment

どのイベントで変数を記録することをお勧めしますか?去る?

現在私は持っています:

private void comboBoxWildCard_SelectedIndexChanged(object sender, EventArgs e)
{
    textBoxSt1.Focus();
    textBoxSt1.Text.Insert(intCursorPos, comboBoxWildCard.SelectedItem.ToString());

}

private void textBoxSt1_Leave(object sender, EventArgs e)
{
    intCursorPos = textBoxSt1.SelectionStart;
}

Leaveイベントでの録音は機能していますが、テキストが挿入されません。何かが足りませんか?

更新:textBoxSt1.Text =が必要でした

textBoxSt1.Text = textBoxSt1.Text.Insert(intCursorPos, comboBoxWildCard.SelectedItem.ToString());

皆さんありがとう。

ありがとう

2
James May

SelectionStartプロパティを変数に保持し、ボタンを押したときにフォーカスをTextBoxに戻します。次に、SelectionStartプロパティを変数のプロパティに設定します。

1
masfenix

TextBoxのテキスト内でマウスをクリックしたときにキャレットの位置を取得するには、TextBoxMouseDownイベントを使用します。 MouseEventArgsのXおよびYプロパティを使用してポイントを作成します。 TextBoxにはGetCharIndexFromPosition(point)というメソッドがあります。ポイントを渡すと、キャレットの位置を返します。これは、マウスを使用して新しいテキストを挿入する場所を決定する場合に機能します。

1
Charles F
int cursorPosition = textBox1.SelectionStart;
//it will extract your current cursor position where ever it is
//textBox1 is name of your text box. you can use one
//which is being used by you in your form
1