web-dev-qa-db-fra.com

Comment coller du texte dans la zone de texte du curseur actuel?

Comment coller du texte dans un TextBox à la position actuelle du curseur dans Windows Forms?

Pas textbox1 += string

37
monkey_boys
var insertText = "Text";
var selectionIndex = textBox1.SelectionStart;
textBox1.Text = textBox1.Text.Insert(selectionIndex, insertText);
textBox1.SelectionStart = selectionIndex + insertText.Length;
43
MNZ

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

45
bsara
 textBox1.Text = textBox1.Text.Insert(textBox1.SelectionStart, "Whatever");
5
Aziz

Je sais que c'est tard, mais le moyen le plus efficace semble être:

textBox1.SelectedText = "Text";
4
Jonathan Wood

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);
1
Maxim Zaslavsky

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();
1
Mike

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");
        }
1
user238450

essayez ce code: 

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

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);
    }
}
0
jv_