以下程序目的是在treeview控件中显示3个分结点:"填空题"、"改错题"、"编程题"。在"填空题"下再附加29个结点,分别为“第1题”、“第2题”...
这些都实现了,但是现在要执行选中“填空题”中的“第1题”那个结点,执行firstTiMuNode.Selected = True的时候老是说“Object variable or With block variable not set”,但是设置断点看到firstTiMuNode不是null,请问如何使用程序设置选择的结点?谢谢。Private Sub loadTiMuTree()
  
    tvwTiMu.Nodes.Clear
    '添加 Node 对象。
    Dim rootNode As Node    '声明 Node 变量。
    Dim blankNode As Node
    Dim modiNode As Node
    Dim fillNode As Node
    
    '带有文本 '所有题目' 的第一个节点。
    Set rootNode = tvwTiMu.Nodes.Add(, , "root", "所有题目", "root", "root")        Set blankNode = tvwTiMu.Nodes.Add("root", tvwChild, "blank_timu", "填空题", "closebook", "openbook")
    Set modiNode = tvwTiMu.Nodes.Add("root", tvwChild, "modi_timu", "改错题", "closebook", "openbook")
    Set fillNode = tvwTiMu.Nodes.Add("root", tvwChild, "fill_timu", "编程题", "closebook", "openbook")    Dim i As Integer
    For i = 1 To 29
        tvwTiMu.Nodes.Add "blank_timu", tvwChild, "blank_timu" & i, "第" & i & "题", "closebook", "openbook"
    Next i
    
    For i = 1 To 29
        tvwTiMu.Nodes.Add "modi_timu", tvwChild, "modi_timu" & i, "第" & i & "题", "closebook", "openbook"
    Next i
    
    For i = 1 To 29
        tvwTiMu.Nodes.Add "fill_timu", tvwChild, "fill_timu" & i, "第" & i & "题", "closebook", "openbook"
    Next i
    
    blankNode.Expanded = True
    Dim firstTiMuNode As Node
    Set fristTiMuNode = tvwTiMu.Nodes("blank_timu1")
    firstTiMuNode.Selected = TrueEnd Sub

解决方案 »

  1.   

    怎样使用VB的treeview控件啊!  
       首先在 VB 中建立一个新工程,单击“工程/部件”,在控件列表中选中“Microsoft Windows command controls6.0(sp4)”,按下“确定”按钮返回主界面,在左侧控件窗体中选中 Treeview 控件置于窗体上,再放置一个 Imagelist 控件、两个 Label 控件、两个Textbox 控件、六个 commandbutton 控件,其属性分别如下:   Treeview 控件:名称 Treeview1;   Imagelist 控件:名称 Imagelist1,并在该控件中放置三张个性图片(32×32),建立索引1、2、3;(方法:在Imagelist 控件上单击鼠标右键选择属性)   Label 控件:名称分别为Lab(0)、Lab(1),Caption分别为“父节点:”、“子节点:”;   Textbox 控件:名称分别为Txt(0)、Txt(1),text都为“”;   commandbutton 控件:名称为系统默认,Caption分别为“添加”、“展开”、“收起”、“排序”、“删除”、“退出”;   将下列代码加入到代码框: Option Explicit  Dim I As Integer 
    Dim J As Integer 
    Dim nodx As Node 
    Dim CunZai As Boolean '定义变量 
    Private Sub Command1_Click() 
     If Txt(0).Text <> "" And Txt(1).Text <> "" Then '不允许建立零字节的父节点和子节点 
      CunZai = False 
      J = TreeView1.Nodes.Count 
      For I = 1 To TreeView1.Nodes.Count '检查新输入的父节点名称是否存在 
       If TreeView1.SelectedItem.Children > 0 Then 
        If Txt(0).Text = TreeView1.Nodes(I).Text Then CunZai = True 
        End If 
      Next I 
      If CunZai = True Then '若存在, 则在父节点下建立子节点  
       Set nodx = TreeView1.Nodes.Add(Txt(0).Text, tvwChild, "child" & J,Txt(1).Text, 3) 
      Else '若不存在,则建立父节点和子节点 
       Set nodx = TreeView1.Nodes.Add(, , Txt(0).Text, Txt(0).Text, 1) 
       Set nodx = TreeView1.Nodes.Add(Txt(0).Text, tvwChild, "child" & J,Txt(1).Text, 3) 
      End If 
      TreeView1.Refresh 
     ElseIf Txt(0).Text = "" Then MsgBox "请输入父节点名称!", vbInformation, "警告!"  
      '系统提示 
     ElseIf Txt(1).Text = "" Then MsgBox "请输入子节点名称!", vbInformation, "警告!" 
     End If 
    End Sub Private Sub Command2_Click() 
     For I = 1 To TreeView1.Nodes.Count 
      TreeView1.Nodes(I).Expanded = True '展开所有节点 
     Next I 
    End Sub Private Sub Command3_Click() 
     For I = 1 To TreeView1.Nodes.Count 
      TreeView1.Nodes(I).Expanded = False '收起所有节点 
     Next I 
    End Sub Private Sub Command4_Click() 
     TreeView1.Sorted = True '排列顺序 
    End Sub Private Sub Command5_Click() 
     If TreeView1.SelectedItem.Index <> 1 Then 
      TreeView1.Nodes.Remove TreeView1.SelectedItem.Index '删除选定的节点 
     End If 
    End Sub Private Sub Command6_Click() 
     End '退出程序  
    End Sub Private Sub Form_Load() 
     TreeView1.LineStyle =TvwTreeLines '在兄弟节点和父节点之间显示线  
     TreeView1.ImageList = ImageList1 '链接图像列 
     TreeView1.Style = tvwTreelinesPlusMinusPictureText  
     '树状外观包含全部元素 
     Set nodx = TreeView1.Nodes.Add(, , "蒲子明", "蒲子明", 1)  
     '建立名称为"蒲子明"的父节点,选择索引为1的图像  
     Set nodx = TreeView1.Nodes.Add("蒲子明", tvwChild, "child01", "收件箱", 3)  
     '在"蒲子明"父节点下建立"收件箱"子节点,选择索引为3的图像 
     Set nodx = TreeView1.Nodes.Add("蒲子明", tvwChild, "child02", "发件箱", 3) 
     '在"蒲子明"父节点下建立"发件箱"子节点,选择索引为3的图像 
     CunZai = False 
    End Sub Private Sub TreeView1_Expand(ByVal Node As MSComctlLib.Node) 
     Node.ExpandedImage = 2 '节点被展开时,选择索引为2的图像 
    End Sub Private Sub TreeView1_NodeClick(ByVal Node As MSComctlLib.Node)  
     If TreeView1.SelectedItem.Children = 0 Then '检查是否有子节点,0为无 
      For I = 1 To TreeView1.Nodes.Count 
      If TreeView1.Nodes(I).Selected Then 
       MsgBox "您选择的是:“" & TreeView1.Nodes(I).FullPath & "”子节点!"  
        '系统提示 
      End If 
      Next I 
     End If  
    End Sub  
     
     
      

  2.   

    呵呵~~ 现在这么这么多照书抄的答题的人啊,这样一点都解决不了问题  这位仁兄啊..... 请仔细看看这句:
      Set fristTiMuNode = tvwTiMu.Nodes("blank_timu1")  f r i s t 是不是写错了. 变量写错了又没用Option Explicit,当然会提示有问题啊!!
      

  3.   

    建议大家在些VB程序之前,在前面加上Option Explicit
      第二次写变量的时候用小写. 这样变量写错了就不会自动转换大小写
      而且未被声明的变量会提示.也少出些低级错误哈