瞎猫撞着死耗子4:不靠谱的treeview节点

Technorati 标签: ,

版权声明:可以任意转载,转载时请务必以超链接形式标明如下文章原始出处和作者信息及本声明 
      作     者:xixi 
      出     处:http://blog.csdn.net/slowgrace/archive/2008/10/30/3185834.aspx

前几天看到篇文章说VC++是垃圾,如果非要用,就用VC。原因大概其说是VC++的某些模板库充满bug且效率低下。当时看了,觉得这是OOP编程的问题。用对象来搭建应用的思想很迷人,可是当代码出错的时候,你整不清是自己的错,还是你用的别人的对象的错的时候,还会觉得OOP好么?

想起来不应该有这样的情况,因为对象都有接口属性方法的嘛,如果测试对象的属性、方法都对的,那就是你的错嘛?可是如果问题反过来呢?如果经测试,对象的属性值不对,这是你的代码导致的、还是对象内部的bug?这时候你就傻眼了吧?

我现在就想小哭一场,因为我刚就遇到这么一桩。

话说,我有两棵几乎一模一样的树,我要在树B上找到((与(树A上选定节点)相对应的节点)的父亲节点)的key,用这么多括号是为了防止您看这句话理解上出现歧义。

一开始我这么写:

'下面这种写法会引起runtime error, 也许是太长的引用把VBA绕晕了

  1.   strParentKey = m_tree.Nodes.Item(objNode.Key).Parent.Key

之后我只好拆成两截这么写:

  1. Set objRelatedNode = m_tree.Nodes.Item(objNode.Key)
  2. strParentKey = objRelatedNode.Parent.Key

F5之后过了。

可过了一阵儿,又出错了。在我的测试用例中,实际上不止2棵几乎一模一样的树,而是5棵,我给它们分别发消息,它们都重复上面的动作,其中4棵能够正常通过,唯有一棵不能通过,显示“对象变量或with块变量未设置”。我跟进去,发现objRelatedNode.Parent为nothing,而实际上我肯定的知道这个node的爹不是nothing。靠。它自己都存在,它的爹是nothing,天下有这种事么?哪儿说理去?再说,这树是我一行一行代码自己生成的,都是先生成爹,再add child的,怎么可能它的爹是nothing呢?

我反复地试了几次,发现出问题的树总是位于属性页上压在下面的那个属性卡上的树。貌似没显示在画面上treeview控件就不能正确的返回某node的parent,我用了node.ensurevisible也不灵。

靠,你现在明白我前面说的“如果经测试,对象的属性值不对,这是你的代码导致的、还是对象内部的bug?”那种心情了吧?这就像你遇到一个很坏的压根儿不爱你的人,他抛弃了你,可因为你很喜欢他,所以你虽然隐隐觉得错的是他,可还是不停地在那儿找自己的错,怎么找也找不着,那个郁闷、那个委屈以及之后那个怨恨!!!

最让人吐血的是,我添了如下代码之后,竟然就过了:

  1. '  If objRelatedNode.Parent Is Nothing Then 
  2. '      Stop 
  3. '      objRelatedNode.EnsureVisible 
  4. '      objRelatedNode.Expanded = True 
  5. '  End If

你看我在里面写了一句stop,可自打我加了这段代码之后,就再也没有stop过,也就是说人家就再也不说自己个儿没爹了!!!

更吐血的是,之后我把ACCESS整个关掉,重新打开,注释掉上述代码,也不再出任何错了。

气死人了。合着刚才费了半天心思猜原因、耽误了瑜伽又耽误了晚饭,都是白跟那儿废功夫啊,这什么编程工具呀?

教训:以后遇到莫名其妙的错,不妨重启应用程序、甚至重启系统试一哈

唉。缓缓神,吃点水果准备睡觉去了。我觉得代码都这么写,软件可太不靠谱了,说起来这控件还是MS的呢。如果软件巨商的产品都是这样,这软件工业的整体质量是不是都很难有效地保障了呢?唉。歇歇先

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值