aardio 文档

aardio 范例: 树视图(treeview)控件 - 动态加载子项演示

//树视图(treeview)控件 - 动态加载子项演示
import win.ui;
/*DSG{{*/
var winform = win.form(text="树形控件动态加载子项演示";right=349;bottom=249)
winform.add(
button={cls="button";text="查找动态加载的子项";left=136;top=200;right=305;bottom=242;z=2};
treeview={cls="treeview";left=22;top=17;right=326;bottom=192;bgcolor=15793151;edge=1;vscroll=1;z=1}
)
/*}}*/

import fsys;
winform.treeview.onnotify = function(id,code,ptr){

     if( code = 0xFFFFFE3A/*_TVN_ITEMEXPANDINGW*/){  
        var nmtv = winform.treeview.getNotifyMessage(code,ptr) 
        if(nmtv.action & 2/*_TVE_EXPAND*/) { 
            var tvi = winform.treeview.getItem(nmtv.itemNew.hItem)    
            if( ! winform.treeview.isExpandedOnce(nmtv.itemNew.hItem) ) {  
                 var _,files = fsys.list("~\codes\范例程序\") 
                 winform.treeview.insertItem( files,tvi.hItem) 
            }
        }

     }
     /**
     elseif( code == 0xFFFFFE3C/*_TVN_GETDISPINFOW*/){ 
        var dispInfo = winform.treeview.getNotifyDispInfo(code,ptr) 
        if( dispInfo ? dispInfo.item ) {
            if( ( dispInfo.item.mask & 0x40/*_TVIF_CHILDREN*/ ) ){ 
                dispInfo.item.cChildren = 1; 
                raw.mixin(ptr,dispInfo);
            } 
        }
     } 
    **/
}

/**
如果cChildren指定为 -1/*_I_CHILDRENCALLBACK*/ 会调用_TVN_GETDISPINFOW获取节点数,
这种方式在节点数目太多时性能较差会出现卡顿现象,而且没有什么意义,
所以直接把cChildren指定为1就可以。
**/
winform.treeview.insertItem( { 
        text = "范例"; 
        cChildren = 1; //指定节点有有一个或多个动态加载的子项,这里只要指定为1,指定为其他数目无意义
} ) 

winform.button.oncommand = function(id,event){ 
    var hItem = winform.treeview.findPath("范例\HTMLayout")
    if( hItem ) {
        winform.treeview.setSelected(hItem);
        winform.treeview.setItemText(hItem,"HTMLayout2") 
    }
} 

winform.show() 
win.loopMessage();

Markdown 格式