今天spy一棵树对象(TVirtualStringTree),发现spy出来的都是一些基本的属性和方法,树本身的属性和方法都没有(原因可能是这个树控件被自定义封装或属于非标准的第三方控件),面对这样的一个对象要展开和遍历,只能通过键盘的上[Up],下[Down],左[Left],右[Right]等箭头去操作了。
思路:将树的层次和节点序号,组合成一个字符串,中间用“-”分割,例如:“6-2-1”,表示第1层的第6个节点展开后,进入第2层的第2个节点展开后,再进入第3层的第1个节点……定义个数组存放split后的节点数(顺序代表层次),然后就用getNumString函数去生成对应数量的操作键就行了。
js代码:
//Description : goto and expand the specified node //Parameter : [IN]objTree -- the object Tree //Parameter : [IN]strLevels -- the level of node,split by "-",such as 6-2-1 //Return : null //Author : Alan function gotoAndExpandNode(objTree,strLevels){ var levels = arguments[1] == undefined || strLevels=="" ? 0 : strLevels;//deal with null and "" var arrLevels = new Array(); if(levels.indexOf("-")!= -1){ arrLevels = levels.split("-"); for(i=0; i<arrLevels.length; i++){ arrLevels[i] = parseInt(arrLevels[i]);//transfer to integer } } else{ arrLevels[0] = parseInt(levels); } var counter = 0; for(i=0; i<arrLevels.length; i++){ var intPos = objTree.VScroll.Pos; if(i == 0 & arrLevels[0] == 0){ objTree.Keys("[Home]");//root node } else{ objTree.Keys(getNumString("[Down]",arrLevels[i]));//go to specified node Log.Message("Go to the node: level: "+(i+1)+" ,position: "+arrLevels[i]); if(i==arrLevels.length-1) break;//last node exit loop objTree.Keys("[Right]");//expanding node objTree.Refresh(); while(objTree.VScroll.Pos <= intPos + 1){ Delay(1000); objTree.Refresh(); if(counter>20) break;//timeout exit loop counter++; } } } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。