社区
VB基础类
帖子详情
也许是很棘手的菜单问题
superjinus
2003-11-16 03:26:44
我们知道菜单有onclick事件,现在我想要在click事件中load该菜单项的子菜单,却不好用,为什么?
Private Sub a_Click()
Load b(0) ' b 是子菜单,a是主菜单
Load b(1)
End Sub
...全文
21
5
打赏
收藏
也许是很棘手的菜单问题
我们知道菜单有onclick事件,现在我想要在click事件中load该菜单项的子菜单,却不好用,为什么? Private Sub a_Click() Load b(0) ' b 是子菜单,a是主菜单 Load b(1) End Sub
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
superjinus
2003-11-20
打赏
举报
回复
我需要在响应Menu Click 事件后显示,上面的方法不好用.
xzp1030
2003-11-16
打赏
举报
回复
菜单项的动态装入
菜单项的动态装入是指菜单项的个数不固定. 例子就是文件菜单中最近打开的文件的列表。在第一次打开文件之前,该列表是空的,并且不在文件菜单中出现;打开一个文件后,该列表不再是空的,并且文件菜单中出现代表被打开文件的菜单项。
具体的实现过程如下:
在文件菜单里增加一个菜单项,标题任意,并假设菜单项的Name属性是opened_files_ list;
更改菜单项opened_files_list的可见属性,使 opened_files_list.Visible=False
更改菜单项opened_files_list的下标属性,使 opened_files_list.Index=0
在程序中控制菜单项opened_files_list的动态装入。
假设要显示打开过的第二个文件的文件名,并且该文件名存放在一个文件名数组opened _file_name里。以下的代码就实现了这一功能:
Load opened_files_list(1)
opened_files_list(1).Caption="&2"+opened_file_name(1)
opened_files_list(1).Visible=True
需要注意的是,对于下标为0的菜单项,不能用Load方法。因为在程序执行时,该菜单项就 已经被装入到内存里了;另外,在菜单项的标题属性字符里的"&"字符具有特殊的含义,它的作 用是在显示该属性字符串的同时,并不显示"&"本身,而紧跟"&"的字符在显示时具有下划线, 并且该字符成为热键。
如果下标不为0的菜单项不再需要,为了减少对内存资源的占用,可以用Unload方法把它 从内存卸出;同样地,不能用Unload卸出下标为0的菜单项。
kimurakenshin
2003-11-16
打赏
举报
回复
用条件语句,把你的条件都列出来,一个一个的对应菜单事件.把它们.visible设置成true或false.
superjinus
2003-11-16
打赏
举报
回复
我的菜单必须是动态的,而且不同时间菜单中内容不同,不是隐藏可以解决的.
programkitty
2003-11-16
打赏
举报
回复
为什么要这样做,如果只是想让用户在单击主菜单才时看到子菜单,可以用隐藏,等用户单击时才逐一显示这些菜单不就行啦!
浏览器
菜单
栏或工具栏丢失
问题
的解决方法
本资源提供由于病毒袭击以及杀毒软件更新等引起的浏览器
菜单
栏或工具栏丢失
问题
。
DIV在IE6中被下拉
菜单
占据的
问题
NULL 博文链接:https://lastforward.iteye.com/blog/609902
Illustrator CS3字体
菜单
更新到90%就自动关闭
Illustrator CS3字体
菜单
更新到90%就自动关闭,重装Illustrator CS3也无济于事。请看下文就知道如何解决。
无限
菜单
之 xml+popup 版(IE5.5+)
在IE5.5+中开始支持的Popup窗口有很多很特别的特性: Popup窗口可以超出浏览器窗口区域; 可以不用担心被下拉框、flash、Iframe等这些东西遮挡; 一个Popup窗口打开后,当在它的区域以外点击或者另一个Popup窗口被打开时都会自动关闭; Popup窗口是没有焦点的; 用户不能改变Popup窗口大小; Popup窗口中的内容是不能被选择的; ...... 因为这些特征,Popup窗口制作的
菜单
比起传统的div(层)实现的
菜单
有着得天独厚的优势,不仅效果会非常好,而且代码也会是非常少的,只是对于实现起来却有几个需要解决的
棘手
问题
:多个Popup共存的
问题
、如何递归生成
菜单
、如何控制Popup的显示隐藏…… 要用Popup制作
菜单
一个最重要的
问题
就是要解决多个Popup共存的
问题
,Msdn上的描述是:“一个Popup窗口打开后,当另一个Popup窗口被打开时就会自动关闭”。我本来一直以为Popup窗口是不可以多个共存的,不过偶然从51js上知道:父Popup窗口可以创建子Popup窗口,子Popup窗口又可以创建子Popup窗口,这样就可以同时存在一个Popup窗口家族,当父Popup窗口关闭,所有的子孙窗口都会关闭。这点恰好可以运用在
菜单
中——父
菜单
关闭子
菜单
一起关闭,省去很多繁琐的判断。 最开始,我写了一个简单的两层的Popup右键
菜单
,为此专门写了一个根据级数生成Popup窗口家族的递归方法: var pops = new Array(); // 用来存储Popup窗口家族的数组 function CreatePopup(degree) { if (degree < 0) // 层数不能小于0 return null; if (pops[degree] != null) //如果已经存在则不需创建 return pops[degree]; if (degree == 0) pops[0] = window.createPopup(); //创建最顶层Popup窗口 else{ if (pops[degree - 1] == null) pops[degree - 1] = CreatePopup(degree - 1) //递归回溯一层一层开始创建 pops[degree] = pops[degree - 1].document.parentWindow.createPopup(); //从父Popup窗口创建子Popup窗口 } pops[degree].document.body.setAttribute("degree", degree); return pops[degree]; } CreatePopup(1); //创建一个2层的Popup家族 这个方法可以解决多个Popup共存的
问题
,只是如果要使用这个方法来实现无限级
菜单
代码恐怕就比较繁琐了。这个例子,只是为我验证了无限级Popup窗口共存的可能,并没有继续走下去,因为我有了更好的思路。 Xml真是好东西,在Web控件中,可以得到灵活的运用(在我的上篇随笔《xml+xsl+htc,web控件开发的理想组合》中,已经简单提到了xml+xsl+htc的理想组合),在这里也不例外,先用Xml来定义好
菜单
的数据menu.xml:
通过Xml,可以很方便直观的定义
菜单
数据。
菜单
数据已经定义好了,现在
问题
就是如何来把这些xml数据变成Popup
菜单
?!在传统的用div(层)来实现的
菜单
,一般都是一次性将所有级
菜单
数据生成HTML,放在各个层中,然后动态在制定位置显示隐藏这些层来实现模拟
菜单
的效果,在这里当然也可以这么做。回想一下
菜单
的特征:每次显示一级
菜单
,如果该级
菜单
中某
菜单
项中有子
菜单
,当鼠标经过或者点击该
菜单
项时弹出下级子
菜单
,这是一个递归的过程。如果我们可以:每次显示一级xml的内容,如果该级xml中某节点有子节点,当鼠标经过该节点时读取下级xml的内容,这也是一个递归的过程,而且恰好和
菜单
的显示过程是一一对应的。 既然大胆假设了一把,那么就来小心求证一下:首先,用xsl来实现解析一级xml很容易搞定,使用xsl:for-each遍历生成子
菜单
,并且,如果子
菜单
中还有子xml数据,将这些子xml数据存在子
菜单
对应的数据岛中,以备后面处理鼠标经过或点击
菜单
项时用到。下面是Menu.xsl用来生成子
菜单
的部分:
现在就是解决鼠标经过
菜单
项时,如果有子
菜单
则解析子
菜单
数据,并使用子Popup窗口显示子
菜单
数据,刚才我们存的数据岛这时候就可以派上用场了。在xsl中,需要用到一些客户端脚本来辅助完成了 // 创建当前窗体(可以是IE窗体也可以是Popup窗体)的Popup对象 // 这个Popup对象就是用来存储子
菜单
数据的 var oPopup = document.parentWindow.createPopup(); // 装载xsl var stylesheet = new ActiveXObject("Microsoft.XMLDOM"); stylesheet.async = false; stylesheet.load( "menu.xsl" ); // 鼠标经过
菜单
项 function ItemOver(obj) { // 隐藏已经打开的
菜单
项 if (preObj != null) { if (preObj == obj) return; oPopup.hide(); // 要清空原Popup中的数据——document.write()方法是接着原来的内容往里面写,所以如果不清空会出现重复数据 oPopup = document.parentWindow.createPopup(); // 恢复前一个
菜单
项的状态 ItemNormal(preObj); preObj = null; } obj.className='PopMenuItemOver'; if (obj.cells(2).children.length > 0) //有子
菜单
{ obj.cells(2).children(0).src = "images/ArrowRHighlight.gif"; // 获取子
菜单
xml数据 var subMenuData = obj.all.tags("xml")(0).XMLDocument; // 根据子
菜单
xml数据和当前xsl文档生成HTML var sHtml = subMenuData.transformNode(stylesheet); // 将解析出来的HTML全部输出到Popup中,在Popup中,又可以利用这些脚本再Popup…… oPopup.document.write(sHtml); // 计算popup内容的实际宽度高度 oPopup.show(0, 0, 1, 1, obj); var width = oPopup.document.body.scrollWidth; var height = oPopup.document.body.scrollHeight; oPopup.hide(); // 显示
菜单
oPopup.show(obj.offsetWidth, 0, width, height, obj); preObj = obj; } } // 鼠标移出
菜单
项 function ItemOut(obj) { if (oPopup.isOpen && preObj == obj) // 如果子
菜单
被打开则跳过 return; ItemNormal(obj); } // 恢复到
菜单
项的默认状态 function ItemNormal(obj) { obj.className='PopMenuItem'; if (obj.cells(2).children.length > 0) { obj.cells(2).children(0).src = "images/ArrowR.gif"; } } 这样:使用menu.xsl解析一级xml的内容生成一级
菜单
,如果该级xml中某节点有子节点,当鼠标经过该节点时,创建当前窗口/Popup窗口的子Popup窗口,使用menu.xsl解析子节点中xml的内容并输出显示到子Popup中,递归,即可通过Popup显示所有子
菜单
。 作为一个
菜单
来讲,这个例子还有很多要完善的地方(当我再结合htc时它绝对是一个非常棒的
菜单
控件),但是这个例子已经完整地实现了一个xml结合xsl递归生成无限Popup
菜单
的例子,这个简洁的代码再次印证了xml+xsl+htc的理想组合。
解决word表格边框线不能保存
问题
个word文档的边框线不能保存,在网上查了一下都没有解决办法。我自己琢磨,现在
问题
已解决,把办法分享给大家。
VB基础类
7,771
社区成员
197,588
社区内容
发帖
与我相关
我的任务
VB基础类
VB 基础类
复制链接
扫一扫
分享
社区描述
VB 基础类
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章