web-dev-qa-db-ja.com

テキストボックスの現在のカーソルにテキストを貼り付ける方法は?

Windowsフォームの現在のカーソル位置のTextBoxにテキストをどのように貼り付けますか?

Nottextbox1 += string

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

より簡単な方法は、Pasteメソッドを使用することです。

  textbox1.Paste("text to insert");

私はこれを.NET 4.0を使用して行いました

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

私はこれが遅いことを知っていますが、最も効率的な方法は次のようです:

textBox1.SelectedText = "Text";
5
Jonathan Wood

これを達成する最良の方法は、TextBox.Text.Insert(int indexSelectionStart、string text)を使用することです。このメソッドの動作はテキストを挿入を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);
1
Maxim Zaslavsky

簡単な方法は

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

これにより、カーソルがテキストボックス内の特定の位置にあることが保証され、カーソルが置かれている場所にテキストが挿入されます。

        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

このコードを試してください:

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

私はこれが古い投稿であることを理解していますが、この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);
    }
}
0
jv_