Comment coller du texte dans un TextBox
à la position actuelle du curseur dans Windows Forms?
Pas textbox1 += string
var insertText = "Text";
var selectionIndex = textBox1.SelectionStart;
textBox1.Text = textBox1.Text.Insert(selectionIndex, insertText);
textBox1.SelectionStart = selectionIndex + insertText.Length;
Un moyen beaucoup plus simple serait d'utiliser la méthode Paste
:
textbox1.Paste("text to insert");
J'ai fait cela en utilisant .NET 4.0
textBox1.Text = textBox1.Text.Insert(textBox1.SelectionStart, "Whatever");
Je sais que c'est tard, mais le moyen le plus efficace semble être:
textBox1.SelectedText = "Text";
La meilleure façon de procéder consiste à utiliser TextBox.Text.Insert (int indexSelectionStart, chaîne de texte)). Ce que fait cette méthode est insérer du texte dans la zone de texte à l'index que vous spécifiez - il utilise string string.insert(int startIndex, string value)
en tant que TextBox.Text est une chaîne dans laquelle nous allons insérer du texte à un moment donné. . Vous souhaitez insérer du texte où se trouve le curseur/le sélecteur, et pour trouver cet index, nous pouvons utiliser TextBox.SelectionStart.
Supposons que votre zone de texte s'appelle textBox1 . C'est à quoi peut ressembler le code, en supposant que le texte que vous souhaitez insérer soit stocké dans la chaîne nommée strInsert.
string strInsert = "I am inserting this text.";
textBox1.Text = textBox1.Text.Insert(textBox1.SelectionStart, strInsert);
Le moyen simple serait
textBox1.Paste();
Cela remplace la sélection actuelle par le contenu du presse-papiers.
Si vous avez besoin de le faire manuellement, c'est un peu plus de travail. N'oubliez pas que si vous "collez", vous "remplacez" la sélection actuelle, le cas échéant. Donc, vous devez d'abord gérer cela. Vous aurez besoin de sauvegarder SelectionStart si vous aviez une sélection, car supprimer le texte le ferait foirer.
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;
}
Une fois que vous avez terminé, vous voudrez invalider le contrôle pour le forcer à se redessiner.
textBox1.Invalidate();
Cela garantit que le curseur se trouve à une position quelconque dans la zone de texte, puis insère le texte où qu'il se trouve.
if (textBox1.CaretIndex <= 0)
{
textBox1.Focus();
textBox1.Text = textBox1.Text.Insert(
textBox1.CaretIndex, "Whatever");
}
else
{
textBox1.Text = textBox1.Text.Insert(
textBox1.CaretIndex, "Whatever");
}
essayez ce code:
string insertText = "Text";
textBox1.Text = textBox1.Text+ insertText;
textBox1.SelectionStart = textBox1.Text.Length +1;
Je sais que c’est un vieux post, mais j’espère que cette collection de méthodes pour TextBox aidera d’autres à lutter contre la manipulation de ce contrôle.
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);
}
}