vbscript版的TreeView,也就是树[4]

[入库:2005年8月18日] [更新:2007年3月25日]

本文简介:选择自 efei 的 blog

" _
?????& "

"
???
??end if
??lpopupmenu = vnewvalue
?end property
?
?
?'===显示菜单===================================================
?public function showmenu()
??if lpopupmenu = "" then
???showmenu = true
???hidemenu
???exit function
??end if?
??dim obj
??on error resume next
??
??set obj = window.event.srcelement
??set obj = window.event.srcelement.parentelement.parentelement.parentelement.parentelement
??if err.number<>0 then
???showmenu = true
???hidemenu
???exit function
??end if
??'if window.event.srcelement.tagname = "img" or window.event.srcelement.tagname = "a" or window.event.srcelement.tagname = "textarea" or window.event.srcelement.tagname = "input" then
??
??if me.nodes(obj.id) is nothing or window.event.srcelement.tagname <> "label" and window.event.srcelement.tagname <> "a" then
???showmenu = true
???hidemenu
???exit function
??else
???'===要弹出菜单了,触发treeview_beforeshowmenu事件
???'事件原型:treeview_beforeshowmenu(name,objnode,cancel)
???dim blncancel
???on error resume next
???blncancel = false
???treeview_beforeshowmenu me.name,me.nodes(obj.id),blncancel
???err.clear
???on error goto 0
???if cbool(blncancel) = true then
????'用户取消显示菜单
????showmenu = true
????hidemenu
????exit function
???end if
???
???
???set lmenunode = me.nodes(obj.id)
???
???set obj = document.getelementbyid("efei_treeview_menu")
???if window.event.clientx + 150 > document.body.clientwidth then
????obj.style.left = window.event.clientx? + document.body.scrollleft
???else
????obj.style.left = window.event.clientx+document.body.scrollleft
???end if
???if window.event.clienty + 100 > document.body.clientheight then
????obj.style.top = window.event.clienty + document.body.scrolltop - 100
???else
????obj.style.top = window.event.clienty + document.body.scrolltop
???end if
???obj.style.display=""
??end if
??showmenu = false
?end function
?'==============================================================
?
?'===隐藏菜单===================================================
?public function hidemenu()
??if lpopupmenu = "" then
???exit function
??end if?
??set lmenunode = nothing
??document.getelementbyid("efei_treeview_menu").style.display="none"
?end function
?'==============================================================
?
?'===添加菜单子项================================================
?public function addmenu(byval strkey,byval strtext)
??if lpopupmenu = "" then
???msgbox "右键菜单功能没有开启!",vbinformation+vbokonly,me.treeview_name
???exit function
??end if
??strkey = trim(strkey)
??strtext = trim(strtext)
??if strkey = "" then
???msgbox "菜单关键字不得为空!",vbinformation+vbokonly,me.treeview_name
???exit function
??end if
??if strtext = "" then
???msgbox "菜单文本不得为空!",vbinformation+vbokonly,me.treeview_name
???exit function
??end if
??dim obj
??set obj = document.getelementbyid("efei_treeview_menu").firstchild.rows(0).cells(1).firstchild
??
??dim objrow,objcell
??
??set objrow = obj.insertrow(obj.rows.length-1)
??objrow.style.color="red"
??set objcell = objrow.insertcell()
??if strtext = "-" then
???objcell.innerhtml = "
"
??else
???objcell.innerhtml = "
" & strtext & "
"
??end if
?end function
?'===============================================================
?
?'===功能:?设置菜单子项的可见性======================================
?function setmenuvisibility(byval key,byval value)
??if cbool(value) = false then
???document.getelementbyid(key).parentelement.parentelement.style.display = "none"
??else
???document.getelementbyid(key).parentelement.parentelement.style.display = ""
??end if
?end function
?'=====================================================================
?
?'===功能:?设置菜单子项的可用性======================================
?function setmenuenable(byval key,byval value)
??document.getelementbyid(key).parentelement.parentelement.disabled = not cbool(value)
?end function
?'=====================================================================
?
?'===鼠标
?sub modifystyle(objkey,opertype)
??on error resume next
??if opertype = "over" then
???with document.getelementbyid(objkey).style
????.background = "highlight"
????.color = "highlighttext"
????
????.cursor = "default"
???end with
??elseif opertype = "out" then
???with document.getelementbyid(objkey).style
????.background = "buttonface"
????.color = "buttontext"
????
????.cursor = "default"
???end with
??end if
?end sub
?
?
?
?'===功能:?回调函数=====================================
?'===参数:?key????关键字,可能是节点的关键字,也可能是菜单的关键字
?'???eventkey??事件关键字
?'===返回:?无
?function callback(byval key,byval eventkey)
?
??on error resume next
??
??select case ucase(eventkey)
???case ucase("onclick")
????me.selectednode = me.nodes(key)
????treeview_onclick me.name,me.nodes(key)
????
???case ucase("menu_onclick")
????treeview_popupmenu_onclick me.name,key,lmenunode
????
??end select
??err.clear
?end function
?'================================================================
end class


?
'=============================================================


'===结点的类===================================================
class node
?public parentobject??'该节点归属的treeview对象
?public key????'层的关键字
?private ltext???'显示的文本
?public property get text()
??text = ltext
?end property
?public property let text(byval vnewvalue)
??ltext = vnewvalue
??'===设置文字
??dim objnode
??set objnode = document.getelementbyid(me.key)
??if not objnode is nothing then
???objnode.rows(0).cells(me.level+2).firstchild.innerhtml = vnewvalue
??end if
?end property
?
?private lhyperlink
?public property get hyperlink()
??hyperlink = lhyperlink
?end property
?public property let hyperlink(byval vnewvalue)
??lhyperlink = vnewvalue
??dim objnode
??set objnode = document.getelementbyid(me.key)
??if not objnode is nothing then
???objnode.rows(0).cells(me.level+2).firstchild.href = vnewvalue
??end if
?end property
?
??
?public index???'索引
?public level???'层次,根节点层次为0
?'public hyperlink??'联接的地址
?public parentnode??'父节点
?public previousnode??'前一个兄弟节点
?public nextnode???'下一个兄弟节点
?public childrencount?'子节点个数
?public nodeindex??'索引,每一级用两位(26个大写字母)表示,共有26*26=676个节点
?public childrennodes?'子节点集合,从零开始
?public addtype???'节点添加类型
?public flag????'附加标记,主要用于给用户在事件中扩展使用
?
?private limage????'图标
?private ldisplaystatus??'显示状态??0-未显示,1-显示
?private lexpandstatus??'展开状态??0-未展开,1-展开
?private lfirstdisplay??'是否是第一次显示
?
?private sub class_initialize()
??set parentobject = nothing
??key = ""
??ltext = ""
??index = 0
??level = 0
??hyperlink = ""
??set parentnode = nothing
??set previousnode = nothing
??set nextnode = nothing
??redim childrennodes(0)
??set childrennodes(0) = nothing
??childrencount = 0
??nodeindex = ""
??image = ""
??lexpandstatus = 0
??ldisplaystatus = 0
??lfirstdisplay = true
??
??addtype = "1"??'默认为添加子节点
??flag = ""
?end sub
?
?public function display()
??dim tabtreeview,udttreeview
??set tabtreeview = document.getelementbyid("tabtreeview")
??set udttreeview = me.parentobject
??dim objnode
??dim objtab,objtr,objtd
??dim i
??set objnode = document.getelementbyid(me.key)
??if objnode is nothing then
??
???'===检测节点的添加类型
???if me.addtype = 1 then
????if me.parentnode.nextnode is nothing then
?????if me.previousnode is nothing then
??????i = document.getelementbyid(me.parentnode.key).parentelement.parentelement.rowindex + 1
?????else
??????set objnode = me.previousnode
??????do until objnode.childrencount = 0
???????set objnode = objnode.children(objnode.childrencount)
??????loop
??????i = document.getelementbyid(objnode.key).parentelement.parentelement.rowindex + 1
?????end if
????else
?????i = document.getelementbyid(me.parentnode.nextnode.key).parentelement.parentelement.rowindex
????end if
???elseif me.addtype = 2 then
????i = document.getelementbyid(me.nextnode.key).parentelement.parentelement.rowindex
???elseif me.addtype = 3 then
????if me.nextnode is nothing then
?????set objnode = me.previousnode
?????do until objnode.childrencount = 0
??????set objnode = objnode.children(objnode.childrencount)
?????loop
?????i = document.getelementbyid(objnode.key).parentelement.parentelement.rowindex + 1
????else
?????i = document.getelementbyid(me.nextnode.key).parentelement.parentelement.rowindex
????end if
???else
????i = tabtreeview.rows.length
???end if
???set objtr=tabtreeview.insertrow(i)
???set objtd=objtr.insertcell()
???objtd.innerhtml = "

本文关键:vbscript版的TreeView,也就是树
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top