2009-09-12 25 views

Respuesta

39
var insertText = "Text"; 
var selectionIndex = textBox1.SelectionStart; 
textBox1.Text = textBox1.Text.Insert(selectionIndex, insertText); 
textBox1.SelectionStart = selectionIndex + insertText.Length; 
+1

Dos cosas: primero, ¿es una muestra de código directo? En C#, la palabra clave var no se usa para crear una variable, sino que se usan tipos de datos precisos. Por lo tanto, usaría * string insertText = "Text"; int selectionIndex = textBox1.SelectionStart; *. En segundo lugar, no necesita definir como textBox1.SelectionStart como su propia variable, simplemente puede llamarlo directamente, pero todo lo que hace es eliminar una línea de código, por lo que no es muy importante. - Maximz2005 0 secs ago –

+7

'var' es nuevo en C# 3.5 (o algo así), es una especie de inferencia de tipo automática, que te ahorra algo de tipeo. Consulte http://msdn.microsoft.com/en-us/library/bb383973.aspx – Svend

+0

¡guau! ¡Nunca lo supe! ¡Muy guay! –

5
textBox1.Text = textBox1.Text.Insert(textBox1.SelectionStart, "Whatever"); 
+0

¿por qué insertó el cursor mover para comenzar el cuadro de texto? –

+0

cómo se puede enfocar el cursor en insertar después de insertar texto –

+2

establecer 'textBox1.SelectionStart' en la posición que desee. – Aziz

1

La mejor manera de lograr esto es utilizar el TextBox.Text.Insert (int indexSelectionStart, cadena de texto). Lo que hace este método es inserte el texto en el TextBox en el índice que usted especifica - usa string string.insert(int startIndex, string value) como TextBox.Text es una cadena en la que vamos a insertar texto en un punto específico. Desea insertar texto donde el cursor/selector es, y para encontrar ese índice, podemos usar TextBox.SelectionStart.

Digamos que su TextBox se llama textBox1. Así es como se ve el código, suponiendo que el texto que desea insertar se almacena en la cadena denominada strInsert.

string strInsert = "I am inserting this text."; 
textBox1.Text = textBox1.Text.Insert(textBox1.SelectionStart, strInsert); 
1

Esto asegura que el cursor está en una posición dentro del cuadro de texto, luego inserta el texto dondequiera que se encuentre el cursor.

 if (textBox1.CaretIndex <= 0) 
     { 

       textBox1.Focus(); 
    textBox1.Text = textBox1.Text.Insert(
       textBox1.CaretIndex, "Whatever"); 
     } 
     else 
     { 
      textBox1.Text = textBox1.Text.Insert(
       textBox1.CaretIndex, "Whatever"); 
     } 
1

La forma más sencilla sería

textBox1.Paste(); 

que sustituye a la selección actual por el contenido del portapapeles.

Si necesita hacerlo manualmente, entonces es un poco más trabajo. Recuerde que si está "pegando", entonces está "reemplazando" la selección actual, si es que hay una. Entonces debes manejar eso primero. Tendrá que guardar SelectionStart si tuvo una selección, ya que eliminar el texto lo arruinará.

string newText = "your text"; 

int start = textBox1.SelectionStart; 

bool haveSelection = textBox1.SelectionLength > 0; 

string text = (haveSelection) ? textBox1.Text.Remove(start,textBox1.SelectionLength) : textBox1.Text; 

textBox1.Text = text.Insert(start,newText); 

if(haveSelection) 
{ 
    textBox1.SelectionStart = start; 
    textBox1.SelectionLength = newText.Length; 
} 

Después de terminar, querrá invalidar el control para forzarlo a volver a dibujar.

textBox1.Invalidate(); 
43

Una manera mucho más fácil sería utilizar el método Paste:

textbox1.Paste("text to insert"); 

He hecho esto utilizando .NET 4.0

+2

+1 Es mucho mejor, porque no afectará la posición del cursor ni el desplazamiento. –

+0

Esto es simple y funciona perfectamente Con esto, cuando selecciona una cadena, puede sobrescribir la cadena seleccionada – kordiseps

4

Sé que es tarde, pero parece la forma más eficiente ser:

textBox1.SelectedText = "Text"; 
+0

Sí, lo es. Upvoted. – AndrewBenjamin

+0

cómo implementarlo en asp.net porque no encontré Propiedad de Texto Seleccionado en asp.net TextBox Control – Sri

+1

@Sri, claramente, ya que el Servidor ASP.NET no tiene información sobre el cliente (por ejemplo, la posición del cursor). Debe usar código JavaScript para tales acciones. – jAC

0

prueba este código:

string insertText = "Text"; 
      textBox1.Text = textBox1.Text+ insertText; 
      textBox1.SelectionStart = textBox1.Text.Length +1; 
0

Me doy cuenta de que esta es una publicación anterior, pero espero que esta colección de métodos para TextBox ayude a los demás a lidiar con la manipulación de este control.

public static class InputExtensions 
{ 
    public static void InsertText(this TextBox textbox, string strippedText) 
    { 
     int start = textbox.SelectionStart; 
     string newTxt = textbox.Text; 
     newTxt = newTxt.Remove(textbox.SelectionStart, textbox.SelectionLength); 
     newTxt = newTxt.Insert(textbox.SelectionStart, strippedText); 
     textbox.Text = newTxt; 
     textbox.SelectionStart = start + strippedText.Length; 
    } 

    public static void Delete(this TextBox textbox) 
    { 
     var startLength = textbox.Text.Length; 
     if (textbox.Text.Length == 0) return; 
     var isSelection = textbox.SelectionLength > 0; 
     var length = Math.Max(!isSelection ? 1 : textbox.SelectionLength, 0); 
     int start = textbox.SelectionStart; 
     string newTxt = textbox.Text; 
     if (length == 0 || start + length > startLength) return; 
     newTxt = newTxt.Remove(start, length); 
     textbox.Text = newTxt; 
     textbox.SelectionStart = start; 
    } 

    public static void Backspace(this TextBox textbox) 
    { 
     var startLength = textbox.Text.Length; 
     if (startLength == 0) return; 
     var isSelection = textbox.SelectionLength > 0; 
     var length = Math.Max(!isSelection ? 1 : textbox.SelectionLength, 0); 
     int start = Math.Max(textbox.SelectionStart - 1, 0); 
     if (length == 0 || start == 0) return; 
     string newTxt = textbox.Text; 
     newTxt = newTxt.Remove(start, length); 
     textbox.Text = newTxt; 
     textbox.SelectionStart = start; 
    } 

    public static void MoveCaretRight(this TextBox textbox) 
    { 
     textbox.SelectionStart = Math.Min(Math.Max(0, textbox.SelectionStart + 1), textbox.Text.Length); 
    } 

    public static void MoveCaretLeft(this TextBox textbox) 
    { 
     textbox.SelectionStart = Math.Min(Math.Max(0, textbox.SelectionStart - 1), textbox.Text.Length); 
    } 

    public static bool IsModifier(this KeyEventArgs e) 
    { 
     return e.Control || e.Alt || e.Shift; 
    } 

    public static bool IsNavigationKey(this KeyEventArgs e) 
    { 
     switch (e.KeyCode) 
     { 
      case Keys.Up: 
      case Keys.Down: 
      case Keys.Left: 
      case Keys.Right: 
      case Keys.PageUp: 
      case Keys.PageDown: 
       return true; 
     } 
     return false; 
    } 

    public static bool IsNonNumber(this KeyEventArgs e) 
    { 
     var key = (char)e.KeyCode; 
     return 
      char.IsLetter(key) || 
      char.IsSymbol(key) || 
      char.IsWhiteSpace(key) || 
      char.IsPunctuation(key); 
    } 

    public static void Paste(TextBox textbox, Func<char, int, bool> charFilter = null) 
    { 
     var pasteText = Clipboard.GetText(); 
     var strippedText = ""; 
     for (var i = 0; i < pasteText.Length; i++) 
     { 
      if (charFilter == null || charFilter(pasteText[i], i)) 
       strippedText += pasteText[i].ToString(); 
     } 
     InsertText(textbox, strippedText); 
    } 
} 
Cuestiones relacionadas