2014-02-26 35 views
0

我在我的表單中創建了一個樹形視圖,並添加了一些節點,並有子節點。我啓用了標籤編輯屬性,並在編輯事件後開始編輯我編寫了一個代碼來保存我的數據庫中的標籤文本,之後我禁用了標籤編輯。但畢竟這個我想改變它的標籤被編輯的節點的文本。我寫這個代碼:如何更改標籤編輯後的樹視圖節點文本?

Private Sub TreeView1_NodeMouseDoubleClick() 
    TreeView1.LabelEdit = True 
    TreeView1.SelectedNode.BeginEdit() 
End Sub 

Private Sub TreeView1_AfterLabelEdit() 
    Dim obj_customers As New Clas1_customers 
    Dim Entity As New tblCustomers 
    inputText = e.Label 
    Entity.C_type= inputText 

    obj_customers .Update(Entity) 

    TreeView1.LabelEdit = False 
    e.Node.Text = e.Label & e.Node.Index 
End Sub 

但是節點文本最後沒有改變,只在樹視圖中顯示標籤。我能做什麼?

+0

如何是這兩個方法被觸發?我看不到他們被附加到任何事件。你使用的是標準的treeview控件嗎? –

+0

我使用標準樹視圖,我希望用戶雙舔後可以編輯節點文本和標籤後編輯保存在數據庫的變化。它的工作,但最後一行不工作。如果有更好的辦法,我會感謝幫助我。 –

回答

0
Private Sub m_pTreeView_AfterLabelEdit(ByVal sender As Object, ByVal e As System.Windows.Forms.NodeLabelEditEventArgs) Handles m_pTreeView.AfterLabelEdit 

    e.CancelEdit = True ' Switch OFF standard edit-end and set values manuell. 

    If IsNothing(m_pTreeView.SelectedNode) Then Return ' Unknown error - impossible. 
    If IsNothing(e.Label) Then Return ' Canceled from user. 

    If 1 > e.Label.Length Then ' Set x.Text = F(x.Name) 
     m_pTreeView.SelectedNode.Text = "NodeDefaultText_" + m_pTreeView.SelectedNode.Name 
    else 
     m_pTreeView.SelectedNode.Text = e.Label ' Same as by "standard edit-end" 
    End If 

End Sub 
+3

你可以添加一些解釋嗎? – Fjodr

1

我一直在尋找一個解決方案來標記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 

希望它可以幫助