当前位置:编程学习 > VB >>

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

用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为空时发生的,请教不知道还有没其他的可能? --------------------编程问答-------------------- LZ对对象的生存周期没有概念
new用在需要实例化一个确切的对象时,定义时不用New,就是一个空指针⋯⋯
后面的问题出在你所用的对象空间已经被释放 --------------------编程问答-------------------- 但是为什么运行时第一次调用会是空呢?  以后再调用就没有这个问题了  请教解决方法 --------------------编程问答-------------------- 补充提问:
经过多次试验,我终于明白了为什么。。。。。
这完全是由于操作的习惯造成的, 一种操作方式是:先单选结点,然后右键;另一种操作方式是直接在一个结点上右键; 这两种结点对于ContextMenuStrip来说是完全不同的,前者其方法sourceControl是有返回对象的,而后者返回的是null。 
一个解决方法是右键前先判断下 是否选中了这个结点,即是否先单击了该结点
不知道还有没有其他的方法? --------------------编程问答-------------------- 补充提问: 经过测试,发现了另一个解决方案
因为treeview默认启动时任何结点都是不选中的,这时候如何使用右键,往往会出现上述问题,所以一个解决方案是: 先判断treeview.nodes.count是否为0,如果不是,就默认地选中第一个,这样可以有效地解决这个问题。 --------------------编程问答-------------------- 我也不知道,纯帮顶了 
补充:VB ,  控件
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,