如何更改标签编辑后的树视图节点文本?

问题描述:

我在我的表单中创建了一个树形视图,并添加了一些节点,并有子节点。我启用了标签编辑属性,并在编辑事件后开始编辑我编写了一个代码来保存我的数据库中的标签文本,之后我禁用了标签编辑。但毕竟这个我想改变它的标签被编辑的节点的文本。我写这个代码:如何更改标签编辑后的树视图节点文本?

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

我使用标准树视图,我希望用户双舔后可以编辑节点文本和标签后编辑保存在数据库的变化。它的工作,但最后一行不工作。如果有更好的办法,我会感谢帮助我。 –

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

我一直在寻找一个解决方案来标记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 

希望它可以帮助