我一直在尋找一個解決方案來標記treeview的編輯問題,並提出了一種解決方法。
當您想要編輯標籤時,Treeview創建一個文本框並使用user32.dll可以獲取動態創建的文本框的句柄。你可以使用這個處理程序來聲明函數和事件處理程序。
我更喜歡創建一個不可見的文本框,將其定位爲treeview只是編輯treenode,因此使用它的所有方法和事件處理程序。
因此TreeView的labeledit屬性設置爲false,剛剛啓動的知名度和定位上保存選定節點的文本框me.Below有VB示例代碼,
Private Sub treeview1_NodeMouseDoubleClick(sender As Object, e As TreeNodeMouseClickEventArgs) Handles treeview1.NodeMouseDoubleClick
ShowLabelTextBox()
End Sub
Private Sub ShowLabelTextBox()
Dim x, y As Int32
x = CInt(treeview1.Bounds.Location.X) + CInt(treeview1.SelectedNode.Bounds.Location.X)
y = CInt(treeview1.Bounds.Location.Y) + CInt(treeview1.SelectedNode.Bounds.Location.Y)
LabelTextBox.Text = treeview1.SelectedNode.Text
LabelTextBox.SetBounds(x, y, LabelTextBox.Width, 8)
LabelTextBox.Show()
LabelTextBox.Focus()
LabelTextBox.SelectAll()
End Sub
Private Sub LabelTextBox_KeyDown(sender As Object, e As KeyEventArgs) Handles LabelTextBox.KeyDown
'User pressed enter, update treenode
If e.KeyCode = Keys.Enter Then
treeview1.SelectedNode.Text = LabelTextBox.Text
treeview1.Focus()
'user pressed cancel, just leave node as it was
ElseIf e.KeyCode = Keys.Escape Then
treeview1.Focus()
End If
End Sub
Private Sub LabelTextBox_LostFocus(sender As Object, e As EventArgs) Handles LabelTextBox.LostFocus
'User clicked anywhere, just leave everything as it was
LabelTextBox.Hide()
End Sub
希望它可以幫助
如何是這兩個方法被觸發?我看不到他們被附加到任何事件。你使用的是標準的treeview控件嗎? –
我使用標準樹視圖,我希望用戶雙舔後可以編輯節點文本和標籤後編輯保存在數據庫的變化。它的工作,但最後一行不工作。如果有更好的辦法,我會感謝幫助我。 –