2009-02-08 67 views

Respuesta

68

Independientemente de si se selecciona algún texto, la propiedad SelectionStart representa el índice en el texto donde se encuentra. Así que usted puede utilizar String.Insert para inyectar un poco de texto, así:

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

Dado que 'Insert' devuelve una cadena en lugar de modificar el original,' myTextBox.Text = myTextBox.Text.Insert (myTextBox.SelectionStart, "Hello World"); 'es necesario. – JYelton

+0

myTextBox.SelectionStart está disponible en system.windows.forms ................... pero estoy buscando la misma funcionalidad en WebFroms .. –

12

desea comprobar la propiedad de la SelectionStartTextBox.

1

Hay que mantener la propiedad SelectionStart en una variable, y luego, cuando se pulsa el botón, cambia el foco de nuevo al cuadro de texto. A continuación, establezca la propiedad SelectionStart en la de la variable.

2

¿En qué evento sugeriría que grabe 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; 
} 

de grabación en el caso Dejar está trabajando, pero el texto no quede insertado, me estoy perdiendo algo?

ACTUALIZACIÓN: necesitaba textBoxSt1.Text =

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

Gracias a todos.

Gracias

5

James, es bastante ineficiente que es necesario sustituir toda la cadena cuando sólo desea insertar algún texto en la posición del cursor.

Una mejor solución sería:

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

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

Encontré esta solución en el eggheadcafe site.

4

Todo lo que tiene que hacer es esto:

doble clic en el elemento (botón, etiqueta, lo que sea) que va a insertar texto en el documento en el cursor. A continuación, escriba esto en:

richTextBox.SelectedText = "whatevertextyouwantinserted"; 
1
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 
0

Para obtener la posición de intercalación al hacer clic en el ratón dentro del texto de una TextBox, utilice el evento TextBoxMouseDown. Cree un punto usando las propiedades X e Y del MouseEventArgs. El 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.

+0

-1: La pregunta original hace ninguna mención de necesitar la posición del cursor en respuesta a un evento de mouse, y la pregunta fue respondida y aceptada en 2009. –

+0

Jaja ... esto es un poco divertido. La pregunta en realidad fue acerca de la posición del * cursor *, por lo que esta es una buena respuesta. Está bastante claro que la pregunta realmente quería la posición del * cursor * en lugar del * cursor *, pero eso no era lo que pedían. –

2

Aquí es mi realización de trabajo, alowing para escribir sólo dígitos, con la restauración de la última posición válida escribir texto:

Xaml:

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

Código atrá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; 
    } 
} 
Cuestiones relacionadas