IT TIP

텍스트 상자에서 커서의 위치를 ​​어떻게 찾습니까?

itqueen 2021. 1. 6. 20:36
반응형

텍스트 상자에서 커서의 위치를 ​​어떻게 찾습니까? 씨#


표준 WinForms TextBox가 있고 텍스트의 커서 위치에 텍스트를 삽입하고 싶습니다. 커서의 위치를 ​​어떻게 알 수 있습니까?

감사


텍스트가 선택되었는지 여부에 관계없이 SelectionStart 속성은 캐럿이있는 텍스트의 인덱스를 나타냅니다. 따라서 다음 과 같이 String.Insert사용 하여 텍스트를 삽입 할 수 있습니다 .

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

SelectionStart속성 을 확인하고 싶습니다 TextBox.


James, 커서 위치에 일부 텍스트 만 삽입하려는 경우 전체 문자열을 교체해야하는 것은 매우 비효율적입니다.

더 나은 솔루션은 다음과 같습니다.

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

아무것도 선택하지 않으면 커서 위치에 새 텍스트가 삽입됩니다. 선택한 항목이 있으면 선택한 텍스트를 삽입하려는 텍스트로 바꿉니다.

나는 eggheadcafe 사이트 에서이 해결책을 찾았다 .


당신이 할 일은 이것뿐입니다.

커서 위치의 문서에 텍스트를 삽입 할 항목 (버튼, 레이블 등)을 두 번 클릭합니다. 그런 다음 다음을 입력하십시오.

richTextBox.SelectedText = "whatevertextyouwantinserted";

다음은 마지막 유효한 입력 텍스트 위치를 복원하여 숫자 만 입력 할 수있는 작업 실현입니다.

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;
    }
}

어떤 이벤트에서 변수를 기록하도록 제안 하시겠습니까? 떠나다?

현재 나는 :

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());

모두 감사합니다.

감사


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

To get the caret position when you click the mouse within the text of a TextBox, use the TextBox MouseDown event. Create a point using X and Y properties of the MouseEventArgs. The TextBox has a method called GetCharIndexFromPosition(point). Pass it the point and it returns the caret position. This works if you are using the mouse to determine where you want to insert the new text.


You have to keep the SelectionStart property in a variable, and then when you press the button, shift the focus back to the TextBox. Then set the SelectionStart property to the one in the variable.

ReferenceURL : https://stackoverflow.com/questions/526540/how-do-i-find-the-position-of-a-cursor-in-a-text-box-c-sharp

반응형