¿Cómo pegar texto en un TextBox
en la posición actual del cursor en Windows Forms?¿Cómo pegar texto en el cursor actual del cuadro de texto?
Notextbox1 += string
¿Cómo pegar texto en un TextBox
en la posición actual del cursor en Windows Forms?¿Cómo pegar texto en el cursor actual del cuadro de texto?
Notextbox1 += string
var insertText = "Text";
var selectionIndex = textBox1.SelectionStart;
textBox1.Text = textBox1.Text.Insert(selectionIndex, insertText);
textBox1.SelectionStart = selectionIndex + insertText.Length;
textBox1.Text = textBox1.Text.Insert(textBox1.SelectionStart, "Whatever");
¿por qué insertó el cursor mover para comenzar el cuadro de texto? –
cómo se puede enfocar el cursor en insertar después de insertar texto –
establecer 'textBox1.SelectionStart' en la posición que desee. – Aziz
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);
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");
}
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();
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
+1 Es mucho mejor, porque no afectará la posición del cursor ni el desplazamiento. –
Esto es simple y funciona perfectamente Con esto, cuando selecciona una cadena, puede sobrescribir la cadena seleccionada – kordiseps
Sé que es tarde, pero parece la forma más eficiente ser:
textBox1.SelectedText = "Text";
Sí, lo es. Upvoted. – AndrewBenjamin
cómo implementarlo en asp.net porque no encontré Propiedad de Texto Seleccionado en asp.net TextBox Control – Sri
@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
prueba este código:
string insertText = "Text";
textBox1.Text = textBox1.Text+ insertText;
textBox1.SelectionStart = textBox1.Text.Length +1;
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);
}
}
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 –
'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
¡guau! ¡Nunca lo supe! ¡Muy guay! –