Как вы вставляете текст в TextBox
в текущую позицию курсора в Windows Forms?Как вставить текст в текстовом поле текущего курсора?
Неtextbox1 += string
Как вы вставляете текст в TextBox
в текущую позицию курсора в Windows Forms?Как вставить текст в текстовом поле текущего курсора?
Неtextbox1 += 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");
Почему вставленный курсор перемещается, чтобы начать текстовое поле? –
как курсор фокус вставить после вставки текста –
установить 'textBox1.SelectionStart' в любую позицию, которую вы хотите. – Aziz
Самый лучший способ для достижения этой цели является использование 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);
Это гарантирует, что курсор находится в определенном месте в текстовом поле, а затем вставляет текст везде, где расположен курсор.
if (textBox1.CaretIndex <= 0)
{
textBox1.Focus();
textBox1.Text = textBox1.Text.Insert(
textBox1.CaretIndex, "Whatever");
}
else
{
textBox1.Text = textBox1.Text.Insert(
textBox1.CaretIndex, "Whatever");
}
Простой способ будет
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();
Намного проще всего было бы использовать Paste
метод:
textbox1.Paste("text to insert");
Я сделал это с помощью .NET 4.0
+1 Это намного лучше, потому что это не повлияет на вашу позицию курсора и прокрутку. –
Это просто и отлично работает С этим: при выборе какой-либо строки вы можете переписать выбранную строку – kordiseps
Я знаю, что это поздно, но представляется наиболее эффективным способом быть:
textBox1.SelectedText = "Text";
Да, это так. Upvoted. – AndrewBenjamin
как реализовать то же самое в asp.net, потому что я не нашел свойство SelectedText в asp.net TextBox Control – Sri
@Sri, ясно, поскольку ASP.NET Server не имеет информации о клиенте (например, о позиции курсора). Вы должны использовать код JavaScript для таких действий. – jAC
попробуйте этот код:
string insertText = "Text";
textBox1.Text = textBox1.Text+ insertText;
textBox1.SelectionStart = textBox1.Text.Length +1;
Я понимаю, что это старое сообщение, но я надеюсь, что эта коллекция методов для 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);
}
}
Две вещи: во-первых, это образец прямого кода? В C# ключевое слово var не используется для создания переменной, вместо этого используются точные типы данных. Таким образом, вы должны использовать * string insertText = "Text"; int selectionIndex = textBox1.SelectionStart; *. Во-вторых, вам не нужно определять как textBox1.SelectionStart как свою собственную переменную, вы можете просто называть ее напрямую, но все это исключает одну строку кода, поэтому не очень важно. - Maximz2005 0 секунд назад –
'var' является новым в C# 3.5 (или что-то в этом роде), это своего рода автоматический вывод типа, сохраняющий вас при наборе текста. См. Http://msdn.microsoft.com/en-us/library/bb383973.aspx – Svend
wow! Я никогда этого не знал! так круто! –