溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

全鍵盤(pán)操作遍歷樹(shù)

發(fā)布時(shí)間:2020-07-12 20:22:49 來(lái)源:網(wǎng)絡(luò) 閱讀:808 作者:孤月2012 欄目:軟件技術(shù)

今天spy一棵樹(shù)對(duì)象(TVirtualStringTree),發(fā)現(xiàn)spy出來(lái)的都是一些基本的屬性和方法,樹(shù)本身的屬性和方法都沒(méi)有(原因可能是這個(gè)樹(shù)控件被自定義封裝或?qū)儆诜菢?biāo)準(zhǔn)的第三方控件),面對(duì)這樣的一個(gè)對(duì)象要展開(kāi)和遍歷,只能通過(guò)鍵盤(pán)的上[Up],下[Down],左[Left],右[Right]等箭頭去操作了。

思路:將樹(shù)的層次和節(jié)點(diǎn)序號(hào),組合成一個(gè)字符串,中間用“-”分割,例如:“6-2-1”,表示第1層的第6個(gè)節(jié)點(diǎn)展開(kāi)后,進(jìn)入第2層的第2個(gè)節(jié)點(diǎn)展開(kāi)后,再進(jìn)入第3層的第1個(gè)節(jié)點(diǎn)……定義個(gè)數(shù)組存放split后的節(jié)點(diǎn)數(shù)(順序代表層次),然后就用getNumString函數(shù)去生成對(duì)應(yīng)數(shù)量的操作鍵就行了。

 

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++;
            }
            
        }
    }
}

 

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI