以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  未将对象引用设置到对象的实例  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=178509)

--  作者:wukangppbb
--  发布时间:2022/7/7 12:07:00
--  未将对象引用设置到对象的实例
老师:
      窗口afterload执行以下代码的时候出现报错,未将对象引用设置到对象的实例。用户名的树形结构出不来,麻烦看一下。

Dim tr As WinForm.TreeView
Dim nd As WinForm.TreeNode
tr = e.Form.Controls("用户")
nd = Tr.Nodes.Add("所有用户","所有用户")
For Each u As UserInfo In Users
    If u.Type = UserTypeEnum.User Then
        If tr.Nodes("所有用户").Nodes.Contains(u.Group) = False Then
            tr.Nodes("所有用户").Nodes.Add(u.Group)
        End If
        tr.Nodes("所有用户").Nodes(u.Group).Nodes.Add(u.Name)
    End If
Next
tr.ExpandAll


--  作者:有点蓝
--  发布时间:2022/7/7 12:11:00
--  
调试技巧:http://www.foxtable.com/webhelp/scr/1485.htm,看哪一句代码出错
--  作者:wukangppbb
--  发布时间:2022/7/7 12:59:00
--  回复:(有点蓝)调试技巧:http://www.foxtable.com/...
运行检测了一下,显示这几句都有错误。我无法理解了。
Dim tr As WinForm.TreeView
Dim nd As WinForm.TreeNode
tr = e.Form.Controls("用户")
nd = Tr.Nodes.Add("所有用户","所有用户")




--  作者:有点蓝
--  发布时间:2022/7/7 13:55:00
--  
不可能的

Dim tr As WinForm.TreeView
msgbox(1)
Dim nd As WinForm.TreeNode
msgbox(2)
tr = e.Form.Controls("用户")
msgbox(tr is nothing)
nd = Tr.Nodes.Add("所有用户","所有用户")
msgbox(nd is nothing)
For Each u As UserInfo In Users
msgbox(u.name)
    If u.Type = UserTypeEnum.User Then
msgbox(u.Group is nothing)
msgbox(tr.Nodes.Contains("所有用户"))
        If tr.Nodes("所有用户").Nodes.Contains(u.Group) = False Then
msgbox(u.Group)
            tr.Nodes("所有用户").Nodes.Add(u.Group)
        End If
msgbox(tr.Nodes("所有用户").Nodes(u.Group) is nothing)
        tr.Nodes("所有用户").Nodes(u.Group).Nodes.Add(u.Name)
    End If
Next
tr.ExpandAll

--  作者:wukangppbb
--  发布时间:2022/7/7 14:13:00
--  回复:(有点蓝)不可能的Dim tr As WinForm.TreeView...
老师:
      下面这两句在运行的时候出现了false 的提示。
tr = e.Form.Controls("用户")
msgbox(tr Is Nothing)————————————————————————提示false 
nd = Tr.Nodes.Add("所有用户","所有用户")
msgbox(nd Is Nothing)————————————————————————提示false 




我试着把e.form.controls("用户")  改成    forms("权限设置").controls("用户")    再次测试还是报错  提示false 

--  作者:有点蓝
--  发布时间:2022/7/7 14:21:00
--  
提示false 是正确的啊!根本没有理解代码Is Nothing的意思。【tr Is Nothing】如果是true表示tr是空对象,如果是false表示tr是有内容的,可以获取到控件对象。

看哪一个提示框弹出关闭后,出现的“未将对象引用设置到对象的实例

--  作者:wukangppbb
--  发布时间:2022/7/7 14:35:00
--  回复:(有点蓝)提示false 是正确的啊!根本没有...
老师:
     测出来了。
是下面这一句
msgbox(tr.Nodes("所有用户").Nodes(u.Group) is nothing),提示 “ture”。    

检查了用户清单,没有给全部的用户做分组设定,里面有一个人没有分组,导致一直取不到分组数据。所以就报错了。

要怎么写才能避免这种错误?




--  作者:有点蓝
--  发布时间:2022/7/7 14:42:00
--  
if u.Group > "" then
--  作者:wukangppbb
--  发布时间:2022/7/7 15:58:00
--  回复:(有点蓝)if u.Group > "" then
老师:
      我用  if u.Group > "" then   ,如下,会多出三个组来。
图片点击可在新窗口打开查看

 If tr.Nodes("所有用户").Nodes.Contains(u.Group) = False  则不会 多出组别

图片点击可在新窗口打开查看

我是想 即使没有配置用户组别 ,也不影响权限的设置 。 

--  作者:有点蓝
--  发布时间:2022/7/7 16:17:00
--  
改后的代码呢? 
[此贴子已经被作者于2022/7/7 16:17:13编辑过]