vb.net TreeView的selectedNode 返回NUll的问题

wpeng1123 2011-08-18 02:55:48
用vb.net 做了一个 treeView和contextmenustrip结合的程序,使用右键可以添加结点
部分代码如下:
Public Sub addPoint()
'添加断点
Dim treeNodeSection As New TreeNode
' Dim c As TreeView = frmMain.SectionContextMenuStrip.SourceControl
treeNodeSection = frmMain.tvwProgram.SelectedNode

MsgBox(treeNodeSection Is Nothing) '调试此对象是否为空
Dim strPointName As String = InputBox("请输入断点名称", "断点名称")
If strPointName.Trim <> "" Then
'MsgBox(strPointName)

'判断是否有同名的结点
If treeNodeSection.Nodes.Count > 0 Then
For Each node As TreeNode In treeNodeSection.Nodes
If strPointName.Trim = node.Text Then
MessageBox.Show("已经具有相同名称的断点", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning)
Exit Sub
End If
Next
End If

treeNodeSection.Nodes.Add(strPointName)


End If

不明白的问题有三个地方:
1、Dim treeNodeSection As New TreeNode 这里我测试不用new也是可以的,所以请教vb里面什么时候需要new,最好是结合例子讲解,谢谢
2、调试程序时,发现一个很奇怪的问题,我在程序中有判断treeNodeSection 这个结点是否为null的代码(MsgBox(treeNodeSection Is Nothing) '调试此对象是否为空
). 在运行程序时,程序刚启动第一次调用此方法时,弹出 True,说明treeNodeSection是null, 但是以后调用时就都是弹出False,好生奇怪,请教解决方案。
3、For Each node As TreeNode In treeNodeSection.Nodes 这句代码有时候也会报错,怀疑是不是当treeNodeSection.Nodes为空时发生的,请教不知道还有没其他的可能?
...全文
378 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xirmao 2011-08-22
  • 打赏
  • 举报
回复
我也不知道,纯帮顶了
wpeng1123 2011-08-19
  • 打赏
  • 举报
回复
补充提问: 经过测试,发现了另一个解决方案
因为treeview默认启动时任何结点都是不选中的,这时候如何使用右键,往往会出现上述问题,所以一个解决方案是: 先判断treeview.nodes.count是否为0,如果不是,就默认地选中第一个,这样可以有效地解决这个问题。
wpeng1123 2011-08-19
  • 打赏
  • 举报
回复
补充提问:
经过多次试验,我终于明白了为什么。。。。。
这完全是由于操作的习惯造成的, 一种操作方式是:先单选结点,然后右键;另一种操作方式是直接在一个结点上右键; 这两种结点对于ContextMenuStrip来说是完全不同的,前者其方法sourceControl是有返回对象的,而后者返回的是null。
一个解决方法是右键前先判断下 是否选中了这个结点,即是否先单击了该结点
不知道还有没有其他的方法?
wpeng1123 2011-08-18
  • 打赏
  • 举报
回复
但是为什么运行时第一次调用会是空呢? 以后再调用就没有这个问题了 请教解决方法
咸清 2011-08-18
  • 打赏
  • 举报
回复
LZ对对象的生存周期没有概念
new用在需要实例化一个确切的对象时,定义时不用New,就是一个空指针⋯⋯
后面的问题出在你所用的对象空间已经被释放

1,451

社区成员

发帖
与我相关
我的任务
社区描述
VB 控件
社区管理员
  • 控件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧