2009-09-12 58 views

Trả lời

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

Hai điều: trước hết, đó là mẫu mã trực tiếp? Trong C#, từ khóa var không được sử dụng để tạo một biến, thay vào đó các kiểu dữ liệu chính xác được sử dụng. Vì vậy, bạn sẽ sử dụng * string insertText = "Text"; int selectionIndex = textBox1.SelectionStart; *. 2, bạn không cần phải định nghĩa như textBox1.SelectionStart như biến riêng của nó, bạn chỉ có thể gọi nó trực tiếp, nhưng tất cả điều này làm là loại bỏ một dòng mã, do đó, không phải là rất quan trọng. - Maximz2005 0 giây trước đây –

+7

'var' là mới trong C# 3.5 (hoặc một cái gì đó), đó là một loại suy luận kiểu tự động, tiết kiệm cho bạn một số gõ. Xem http://msdn.microsoft.com/en-us/library/bb383973.aspx – Svend

+0

wow! tôi không bao giờ biết rằng! thật tuyệt! –

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

tại sao con trỏ được chèn di chuyển đến hộp văn bản bắt đầu? –

+0

cách con trỏ có thể tập trung vào chèn sau khi chèn văn bản –

+2

đặt 'textBox1.SelectionStart' thành bất kỳ vị trí nào bạn muốn. – Aziz

1

Cách tốt nhất để thực hiện điều này là sử dụng TextBox.Text.Insert (int indexSelectionStart, chuỗi văn bản). Phương pháp này là gì chèn văn bản vào hộp văn bản tại chỉ mục bạn chỉ định - nó sử dụng string string.insert(int startIndex, string value) làm TextBox.Text là chuỗi mà chúng tôi sẽ chèn văn bản vào một điểm cụ thể. Bạn muốn chèn văn bản nơi con trỏ/bộ chọn là và để tìm chỉ mục đó, chúng tôi có thể sử dụng TextBox.SelectionStart.

Giả sử hộp văn bản của bạn có tên là textBox1. Đây là mã trông như thế nào, giả sử rằng văn bản bạn muốn chèn được lưu trữ trong chuỗi có tên strInsert.

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

Điều này đảm bảo con trỏ ở vị trí nào đó trong hộp văn bản, sau đó chèn văn bản vào vị trí con trỏ.

 if (textBox1.CaretIndex <= 0) 
     { 

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

Cách đơn giản sẽ là

textBox1.Paste(); 

Đó thay thế lựa chọn hiện tại với nội dung của clipboard.

Nếu bạn cần thực hiện theo cách thủ công thì đó là công việc nhiều hơn một chút. Hãy nhớ nếu bạn đang "dán" thì bạn đang "thay thế" lựa chọn hiện tại nếu có. Vì vậy, bạn cần phải xử lý đầu tiên. Bạn sẽ cần phải lưu SelectionStart nếu bạn đã có một lựa chọn như loại bỏ các văn bản sẽ vít nó lên.

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

Sau khi bạn hoàn tất, bạn sẽ muốn làm mất hiệu lực kiểm soát để bắt buộc vẽ lại.

textBox1.Invalidate(); 
43

Một cách dễ dàng hơn nhiều là sử dụng các phương pháp Paste:

textbox1.Paste("text to insert"); 

Tôi đã làm điều này sử dụng .NET 4.0

+2

+1 Tốt hơn nhiều, vì nó sẽ không ảnh hưởng đến vị trí con trỏ và cuộn của bạn. –

+0

Điều này là đơn giản và hoàn toàn làm việc Với điều này, khi bạn chọn một số chuỗi, bạn có thể ghi đè lên chuỗi đã chọn – kordiseps

4

Tôi biết đây là muộn nhưng cách hiệu quả nhất xuất hiện là:

textBox1.SelectedText = "Text"; 
+0

Đúng vậy. Được thăng hạng. – AndrewBenjamin

+0

làm thế nào để thực hiện tương tự trong asp.net vì tôi đã không tìm thấy tài sản SelectedText trong asp.net TextBox Control – Sri

+1

@ Sri, rõ ràng, kể từ khi ASP.NET Server không có thông tin về khách hàng (ví dụ như vị trí con trỏ). Bạn nên sử dụng mã JavaScript cho các hành động như vậy. – jAC

0

thử mã này:

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

Tôi nhận thấy đây là một bài đăng cũ nhưng tôi hy vọng bộ sưu tập phương pháp này cho TextBox sẽ giúp người khác đấu tranh với thao tác kiểm soát này.

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ác vấn đề liên quan