# aardio 范例: 树视图（treeview）控件 - 动态加载子项演示



```aardio
//树视图（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();

```

