【问题标题】:how to change tree view node text after label edit?标签编辑后如何更改树视图节点文本?
【发布时间】:2014-02-26 09:19:29
【问题描述】:

我在表单中创建了一个树视图并添加了一些节点和子节点。我启用了标签编辑属性并在编辑事件之后开始编辑我编写了一个代码以将标签文本保存在我的数据库中,然后我禁用标签编辑。但毕竟这一切我想更改其标签被编辑的节点的文本。我写了这段代码:

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

但节点文本最后没有改变,只在树形视图中显示标签。我能做些什么?

【问题讨论】:

  • 这两种方法是如何被触发的?我看不出它们与任何事件有关。您使用的是标准树视图控件吗?
  • 我使用标准树视图,我希望双击后的用户可以编辑节点文本,并在标签编辑后将更改保存在 db 中。它的工作,但最后一行不起作用。如果有更好的方法,我会感谢帮助我。

标签: vb.net treeview


【解决方案1】:
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

【讨论】:

  • 你能补充一些解释吗?
  • 这个答案应该被接受。强调e.CancelEdit
【解决方案2】:

我一直在寻找使用树视图来解决标签编辑问题的解决方案,并提出了一种解决方法。

当您要编辑标签时,Treeview 会创建一个文本框,并使用 user32.dll 您可以获得动态创建的文本框的句柄。您可以使用此处理程序声明函数和事件处理程序。

我更喜欢创建一个不可见的文本框,将其定位为树视图,这样就可以编辑树节点,因此使用它的所有方法和事件处理程序。

因此treeview的labeledit属性设置为false,只是启动可见性并将文本框定位在所选节点上救了我。下面是示例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

希望对你有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-27
    • 1970-01-01
    • 1970-01-01
    • 2012-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多