Как вставить текст в текущий курсор в текстовом поле?

Как вы вставляете текст в TextBox в текущую позицию курсора в Windows Forms?

Не textbox1 += string

Ответ 1

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

Ответ 2

Намного проще было бы использовать метод Paste:

  textbox1.Paste("text to insert");

Я сделал это с помощью .NET 4.0

Ответ 3

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

Ответ 4

Я знаю, что это поздно, но самый эффективный способ:

textBox1.SelectedText = "Text";

Ответ 5

Лучший способ добиться этого - использовать TextBox.Text.Insert(int indexSelectionStart, текст строки). Что этот метод делает, это вставить текст в TextBox в указанном вами указателе - он использует string string.insert(int startIndex, string value), поскольку TextBox.Text - это строка, которую мы собираемся вставить текст в в определенной точке. Вы хотите вставить текст , где курсор/селектор, и чтобы найти этот индекс, мы можем использовать TextBox.SelectionStart.

Скажем, что ваш TextBox имеет имя textBox1. Это то, что может выглядеть код, предполагая, что текст, который вы хотите вставить, сохраняется в строке с именем strInsert.

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

Ответ 6

Это гарантирует, что курсор находится в некоторой позиции в текстовом поле, а затем вставляет текст везде, где находится курсор.

        if (textBox1.CaretIndex <= 0)
        {

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

Ответ 7

Простым способом было бы

textBox1.Paste();

Это заменяет текущий выбор содержимым буфера обмена.

Если вам нужно сделать это вручную, то это немного больше. Помните, если вы "вставляете", то вы "заменяете" текущий выбор, если он есть. Поэтому вам нужно сначала обработать это. Вам нужно будет сохранить SelectionStart, если у вас есть выбор, так как удаление текста будет испорчено.

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;
}

После того, как вы закончите, вы захотите сделать недействительным элемент управления, чтобы заставить его перерисовать.

textBox1.Invalidate();

Ответ 8

попробуйте этот код:

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

Ответ 9

Я понимаю, что это старая должность, но я надеюсь, что эта коллекция методов для TextBox поможет другим бороться с манипулированием этим элементом управления.

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