mouseposition getposition c# cursor-position

mouseposition - mouse getposition c#



¿Cómo encuentro la posición de un cursor en un cuadro de texto? DO# (9)

Tengo un WinForms TextBox estándar y quiero insertar texto en la posición del cursor en el texto. ¿Cómo puedo obtener la posición del cursor?

Gracias


¿En qué evento sugieres que registre la variable? ¿Salir?

Actualmente tengo:

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

La grabación en el evento Leave funciona, pero el texto no se inserta, ¿me falta algo?

ACTUALIZACIÓN: necesitaba textBoxSt1.Text =

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

Gracias a todos.

Gracias


James, es bastante ineficiente que necesites reemplazar toda la cadena cuando solo quieres insertar algo de texto en la posición del cursor.

Una mejor solución sería:

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

Cuando no tiene nada seleccionado, insertará el nuevo texto en la posición del cursor. Si tiene algo seleccionado, esto reemplazará el texto seleccionado con el texto que desea insertar.

Encontré esta solución en el sitio de eggheadcafe .


Todo lo que tienes que hacer es esto:

Haga doble clic en el elemento (botón, etiqueta, lo que sea) que insertará el texto en el documento en el cursor. Luego escribe esto en:

richTextBox.SelectedText = "whatevertextyouwantinserted";


Desea verificar la propiedad SelectionStart del TextBox .


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


Aquí está mi realización de trabajo, dejando de escribir solo dígitos, con la restauración de la última posición de texto de mecanografía válida:

Xaml:

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

Código detrás:

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


Debe mantener la propiedad SelectionStart en una variable y luego, cuando presione el botón, cambie el foco de regreso al TextBox. Luego, establezca la propiedad SelectionStart en la de la variable.


Para obtener la posición de intercalación cuando hace clic con el mouse dentro del texto de un TextBox , use el evento TextBox MouseDown . Cree un punto usando las propiedades X e Y de MouseEventArgs . TextBox tiene un método llamado GetCharIndexFromPosition(point) . Pase el punto y devuelve la posición de intercalación. Esto funciona si está usando el mouse para determinar dónde desea insertar el nuevo texto.


Independientemente de si se selecciona algún texto, la propiedad SelectionStart representa el índice en el texto donde se encuentra. Entonces puede usar String.Insert para inyectar texto, como este:

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