Vb.net 标签编辑后如何更改树视图节点文本?
我在表单中创建了一个树状视图,并添加了一些节点和子节点。我启用了“标签编辑”属性,并在“编辑后”事件中开始编辑。我编写了一个代码将标签文本保存在数据库中,然后禁用标签编辑。但在所有这些之后,我想更改节点的文本,它的标签被编辑。我写这段代码:Vb.net 标签编辑后如何更改树视图节点文本?,vb.net,treeview,Vb.net,Treeview,我在表单中创建了一个树状视图,并添加了一些节点和子节点。我启用了“标签编辑”属性,并在“编辑后”事件中开始编辑。我编写了一个代码将标签文本保存在数据库中,然后禁用标签编辑。但在所有这些之后,我想更改节点的文本,它的标签被编辑。我写这段代码: Private Sub TreeView1_NodeMouseDoubleClick() TreeView1.LabelEdit = True TreeView1.SelectedNode.BeginEdit() End Sub Pri
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
但节点文本最终没有改变,只在树状视图中显示标签。我能做什么 我一直在寻找一种解决TreeView标签编辑问题的方法,并想出了一个解决办法
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
当您想要编辑标签时,Treeview会创建一个文本框,使用user32.dll可以获得动态创建的文本框的句柄。可以使用此处理程序声明函数和事件处理程序
我更喜欢创建一个不可见的文本框,将其定位为treeview只需编辑treenode即可,因此使用其所有方法和事件处理程序
因此,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
希望它能有所帮助这两种方法是如何触发的?我看不出他们与任何事件有关联。您是否使用标准treeview控件?我使用标准treeview,我希望用户在双击后可以编辑节点文本,并在标签编辑后将更改保存到db。行,但最后一行不行。如果有更好的方法,我会感谢你的帮助。你能补充一些解释吗?这个答案应该被接受。强调电子商务