2012-06-15 172 views
1

我想解決如何在特定光標點處將字符串「End」插入到文本框中? (其中「???」位於下面的代碼中)將文本插入到光標位置的文本框中VB

正如您在下面的代碼中看到的,當用戶在文本框中單擊鍵盤上的返回時,會發生這種情況。

我的代碼以獲得正被存儲爲整數「intcurrentcolumn」光標索引。

感謝

Private Sub Enter_Click(ByVal Sender As System.Object, ByVal k As System.Windows.Forms.KeyEventArgs) 

    Dim MyTextBox As TextBox = sender 
    Dim intindex As Integer 
    Dim intcurrentcolumn As Integer 
    Dim NewString As String 

    If k.KeyCode = Keys.Return Then 

     k.SuppressKeyPress = True 

     intindex = MyTextBox.SelectionStart 
     intcurrentColumn = intindex - MyTextBox.GetFirstCharIndexFromLine(intcurrentLine) 

     If intindex = MyTextBox.Text.Length Then 

     NewString = MyTextBox.Text & "<End>" 

     Else: 

     ??? 

     End If 

     MyTextBox.Text = NewString 

     'Sets cursor to end of textbox 
     MyTextBox.Select(MyTextBox.Text.Length, 0) 

     End If 

提前感謝!

回答

3

String.Insert方法的作品,但重置光標位置這是通常不是你想要的(雖然你的代碼之後重置也無妨)。更好的選擇是隻設置SelectedText

MyTextBox.SelectedText = "<End>" 

在你的情況,選定的文本只是長度爲0,你插入的文本"<End>"之前。

這也使得If…Else區別是不必要的。

Private Sub Enter_Click(ByVal Sender As Object, ByVal k As System.Windows.Forms.KeyEventArgs) 
    If k.KeyCode = Keys.Return Then 
     Dim MyTextBox As TextBox = DirectCast(sender, TextBox) 
     MyTextBox.SelectedText = "<End>" 
     MyTextBox.SelectionStart = MyTextBox.Text.Length 
     k.SuppressKeyPress = True 
    End If 
End Sub 

請注意,我也在你的代碼修正了一個錯誤:的sender分配給MyTextBox需要一個明確的!如果您編譯原始代碼,您應該(!)設置Option Strict On。這是必不可少的由編譯器改進類型檢查,應視爲無條件要求。

此外,在使用它們之前不要聲明變量。首先爲他們分配一個值,然後在最新的可能點宣佈它們。這使得程序狀態更容易追蹤,並且通常導致更短的代碼。


(除非你的工作很多與COM後期綁定,在這種情況下,你可以禁用它在每個文件的基礎)。

+0

感謝您的幫助!非常有效的代碼。 Registers Ben – Ben

+0

+1 Ah !,我正在尋找那種避免插入的shorcut,但是找不到合適的方法。這非常好。 – Steve

1

看那String.Insert方法,像這樣

MyTextBox.Text = MyTextBox.Text.Insert(intindex, "<End>") 
相關問題