-
vb 子菜单无法使上一级已经隐藏的菜单显示
2013-04-08 21:29:55建立菜单如下 文件 ...............变化 (不可见) ............................................显示 ...............退出 下面通过弹出“变化”菜单,触发"显示"事件,使得上一级菜单”变化“可以显示...建立菜单如下
文件
...............变化 (不可见)
............................................显示
...............退出
下面通过弹出“变化”菜单,触发"显示"事件,使得上一级菜单”变化“可以显示出来
Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = vbRightButton Then PopupMenu menuchange End If End Sub Private Sub menuDisplay_Click() menuchange.Visible = True End Sub
可以看到,没有效果,”变化“菜单仍然处于不可见,为什么呢?代码没有错啊。把点击事件的代码去掉,跟踪发现
尽管”变化“是不可见的,当弹出菜单时,会发现可见为真,当弹出菜单完成后会发现,可见为假。
那么,我们把弹出菜单时置为假时,最后再置真时,就会发现它就会始终保持最后一句的状态。
于是改为下面
Private Sub menuDisplay_Click() menuchange.Visible = False menuchange.Visible = True End Sub
这样,就可以激活上一级可见菜单。 -
VB.Net程序设计:动态添加右键菜单和子菜单
2013-04-09 16:18:09VB.Net程序设计:动态添加右键菜单和子菜单 具体分5步 1:定义一个ContextMenuStrip对象。 2:用withevents关键字声明一个ContextMenu对象Private WithEvents ContextMenu1 As System.Windows.Forms.ContextMenu...VB.Net程序设计:动态添加右键菜单和子菜单
具体分5步
1:定义一个ContextMenuStrip对象。
2:用withevents关键字声明一个ContextMenu对象Private WithEvents ContextMenu1 As System.Windows.Forms.ContextMenu。
3:对ContextMenu对象进行初始化。
4:将ContextMenu对象加入ContextMenu对象。
5:将ContextMenu对象与form对象绑定。
例子:‘添加三个右键菜单,并每个菜单都添加两个子菜单,把右键菜单绑定到当前窗体
Private cms As ContextMenuStrip = New ContextMenuStrip() Dim i As Integer For i = 1 To 3 Dim tsm As ToolStripMenuItem = New ToolStripMenuItem(i.ToString()) Dim j As Integer For j = 1 To 2 Dim tsmz As ToolStripMenuItem = New ToolStripMenuItem(j.ToString()) tsm.DropDown.Items.Add(tsmz) Next cms.Items.Add(tsm) Next Me.ContextMenuStrip = cms
例子:http://bbs.csdn.net/topics/350192775
绑定事件:Dim cm As New ContextMenu Dim m As New MenuItem("菜单项1") AddHandler m.Click, AddressOf MenuItemClicked cm.MenuItems.Add(m) Dim m2 As New MenuItem("菜单项2") AddHandler m2.Click, AddressOf MenuItemClicked cm.MenuItems.Add(m2) Me.ContextMenu = cm '设置窗体右键菜单
Public Sub MenuItemClicked(ByVal sender As Object, ByVal e As EventArgs) Dim m As MenuItem = DirectCast(sender, MenuItem) MessageBox.Show(m.Text) End Sub
读取菜单值:建议把sender 对象强制转换为菜单,你就可以任意访问该菜单对象的属性了。例如Text,例如Tag属性等。
Dim menuItem As ToolStripMenuItem = DirectCast(sender, ToolStripMenuItem)
Dim temp As String = menuItem.Text
Dim tag as object = menuItem.tag'详细一点的:仅供参考!http://s.yanghao.org/program/viewdetail.php?i=51247
设置菜单的图标,是否合并,等。
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace ContextMenuStripDemo { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void InitListBox() {//添加ListBox的项 for (int i = 0; i < 11; i++) { this.listBox1.Items.Add(i); this.listBox2.Items.Add(i); } } private void InitContextMenuStrip() { ContextMenuStrip contextMenuStrip = new ContextMenuStrip();//构造一个ContextMenuStrip contextMenuStrip.AllowMerge = false;//设置不能跟其他菜单合并 ImageList imagelist = new ImageList();//设置图像集合 imagelist.Images.Add(new Icon("delete.ico")); contextMenuStrip.ImageList = imagelist; contextMenuStrip.ShowCheckMargin = false; contextMenuStrip.ShowImageMargin = true;//显示图标在左边 contextMenuStrip.ShowItemToolTips = true;//显示工具提示 contextMenuStrip.TextDirection = ToolStripTextDirection.Horizontal;//水平显示文本 contextMenuStrip.Opening += new CancelEventHandler(contextMenuStrip_Opening); this.listBox1.ContextMenuStrip = contextMenuStrip;//绑定到ListBox1控件 this.listBox2.ContextMenuStrip = contextMenuStrip;//绑定到ListBox2控件 } void contextMenuStrip_Opening(object sender, CancelEventArgs e) { ContextMenuStrip contextMenuStrip = sender as ContextMenuStrip; if (contextMenuStrip != null) {//第一次点击右键时,如果没有菜单项就添加 if (contextMenuStrip.Items.Count == 0) { ToolStripMenuItem itemDelete = new ToolStripMenuItem(); itemDelete.Text = "删除"; itemDelete.ImageIndex = 0; itemDelete.Click += new EventHandler(itemDelete_Click); contextMenuStrip.Items.Add(itemDelete);//增加菜单项 } } } void itemDelete_Click(object sender, EventArgs e) { ToolStripMenuItem Menuitem = sender as ToolStripMenuItem; ContextMenuStrip contextMenuStrip = Menuitem.Owner as ContextMenuStrip;//获取父菜单对象 if (contextMenuStrip != null) {//通过SourceControl获取目标控件 ListBox listBox = contextMenuStrip.SourceControl as ListBox; if (listBox != null && listBox.SelectedIndex>-1) { listBox.Items.RemoveAt(listBox.SelectedIndex); } } } private void Form1_Load(object sender, EventArgs e) { InitContextMenuStrip(); InitListBox(); } } }
-
vb.net下怎样判断菜单下面是否还有子菜单?
2013-01-21 11:59:23vb.net下怎样判断菜单下面是否还有子菜单? 它没有hasChildren属性。 -
VB子窗体中的菜单为什么弹不出来?
2016-05-13 11:04:03现在的问题:窗体1中通过按钮弹出菜单form2 show 1方式打开的form2,新窗体中的菜单无法弹出,但是通过默认位置的菜单同样form2 show 1方式打开form2,窗体2中的菜单确能正常打开,如下图所示,除了红色方式打开的新... -
VB 用API创建动态菜单,含子菜单且能响应事件。
2011-03-09 10:12:24'加入子菜单,令其ID>1000,说明其为自动生成的菜单 AppendMenu1 hPopMenuTmp, MF_STRING, 1000 + MenuCount, MenuText(MenuCount) '如果是间隔线,则wFlags=MF_SEPARATOR '如果要Check,则wFlags=MF_STRING + MF_....模块代码如下:
注意:因为有用到AddressOf OnMenu,函数OnMenu只能放在模块部分。Public Const MF_POPUP = &H10&
Public Const MF_STRING = &H0&
Public Const MF_DISABLED = &H2&
Public Const MF_SEPARATOR = &H800&
Public Const MF_CHECKED = &H8&
Public Const MF_GRAYED = &H1&
Public Const MF_BYCOMMAND = &H0&
Public Const GWL_WNDPROC = (-4)
Public Const WM_COMMAND = &H111
Public Declare Function CreateMenu Lib "user32" () As Long
Public Declare Function GetMenu Lib "user32" (ByVal hwnd As Long) As Long
Public Declare Function GetMenuItemCount Lib "user32" (ByVal hMenu As Long) As Long
Public Declare Function GetSubMenu Lib "user32" (ByVal hMenu As Long, ByVal nPos As Long) As Long
Public Declare Function CreatePopupMenu Lib "user32" () As Long
Public Declare Function AppendMenu1 Lib "user32" Alias "AppendMenuA" (ByVal hMenu As Long, ByVal wFlags As Long, ByVal wIDNewItem As Long, ByVal lpNewItem As String) As Long
Public Declare Function SetMenu Lib "user32" (ByVal hwnd As Long, ByVal hMenu As Long) As Long
Public Declare Function DrawMenuBar Lib "user32" (ByVal hwnd As Long) As Long
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public MenuCount As Long '菜单数量,不包括不能触发的菜单
Public MenuText() As String '菜单文本,ID=wParam的菜单的文本为MenuText(wParam - 1000)
Public OldWinProc As Long
Public Function OnMenu(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
'{响应菜单事件}
Select Case wMsg
Case WM_COMMAND
If wParam > 1000 And wParam <= 1000 + MenuCount Then
MsgBox MenuText(wParam - 1000)
End If
End Select
OnMenu = CallWindowProc(OldWinProc, hwnd, wMsg, wParam, lParam)
End Function
2.Form1代码如下:
设计窗体的Negotiation=False,以防止弹出对话框或响应OnMenu后窗体上的菜单消失Private Sub Form_Load()
Call CreateActiveMenu
End Sub
Sub CreateActiveMenu()
Dim hMenu As Long, hSubMenu As Long
Dim hPopMenuTmp As Long
ReDim MenuText(0)
hMenu = GetMenu(Me.hwnd) '窗体级菜单句柄
If hMenu = 0 Then
'窗体上没有菜单时,创建菜单。这种情况下需在设计阶段设置窗体的NegotiatMenu=False菜单才能显示出来。
hMenu = CreateMenu()
End If
'添加到0级菜单
hSubMenu = hMenu
FullAllSubMenu hSubMenu
'添加到1级菜单
hSubMenu = GetSubMenu(hSubMenu, GetMenuItemCount(hSubMenu) - 1) '获取最后一个0级菜单的句柄
FullAllSubMenu hSubMenu
'添加到2级菜单
hSubMenu = GetSubMenu(hSubMenu, GetMenuItemCount(hSubMenu) - 1)
FullAllSubMenu hSubMenu
'添加到3级菜单
hSubMenu = GetSubMenu(hSubMenu, GetMenuItemCount(hSubMenu) - 1)
FullAllSubMenu hSubMenu
SetMenu Me.hwnd, hMenu
DrawMenuBar Me.hwnd
Me.Refresh
OldWinProc = SetWindowLong(Me.hwnd, GWL_WNDPROC, AddressOf OnMenu)
End Sub
Sub FullAllSubMenu(hFather As Long)
'加入全部子菜单
Dim hPopMenuTmp As Long
Dim i As Integer
hPopMenuTmp = CreatePopupMenu()
For i = 0 To 4
MenuCount = MenuCount + 1
'保存菜单文本,用于菜单事件触发时识别出被选择的菜单对象
ReDim Preserve MenuText(MenuCount)
MenuText(MenuCount) = "文件" & MenuCount
'加入子菜单,令其ID>1000,说明其为自动生成的菜单
AppendMenu1 hPopMenuTmp, MF_STRING, 1000 + MenuCount, MenuText(MenuCount)
'如果是间隔线,则wFlags=MF_SEPARATOR
'如果要Check,则wFlags=MF_STRING + MF_CHECKED,若令不可用,则再加MF_GRAYED
Next
AppendMenu1 hFather, MF_POPUP, hPopMenuTmp, "&Files"
End Sub -
vb.net 用MenuStrip动态创建菜单,怎样添加子菜单,并增加click事件
2012-08-21 11:25:34Private Sub Form9_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load MenuStrip1.Items.Add("文件", Nothing, AddressOf menuItem_Click).Name = "mnuFile" ...Private Sub Form9_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load MenuStrip1.Items.Add("文件", Nothing, AddressOf menuItem_Click).Name = "mnuFile" MenuStrip1.Items.Add("编辑", Nothing, AddressOf menuItem_Click).Name = "mnuEdit" Dim doItem As ToolStripMenuItem = MenuStrip1.Items("mnuFile") doItem.DropDownItems.Add("打开", Nothing, AddressOf menuItem_Click).Name = "mnuOpen" doItem.DropDownItems.Add("保存", Nothing, AddressOf menuItem_Click).Name = "mnuSave" End Sub Private Sub menuItem_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles MenuStrip1.Click Try Select Case sender.name Case "mnuFile" MsgBox("文件") Case "mnuEdit" MsgBox("编辑") Case "mnuOpen" MsgBox("打开") Case "mnuSave" MsgBox("保存") End Select Catch ex As Exception End Try End Sub
-
VB6.0 动态菜单新手制作源码.rar
2019-07-10 11:34:38VB6.0 制作一个动态菜单,面向VB新手的范例,这种形式的菜单可能是大家见的比较多的了,点击菜单,动态显示出二级子菜单,与Windows窗口中的菜单大同小异。 为了更好的演示功能,这些菜单还定义了动作,比如弹出... -
VB TreeView窗体展开菜单代码.rar
2019-07-10 19:43:59VB TreeView 多级展开的树形菜单,可展开、折叠多级子节点的菜单,VB6下顺利编译,它可以无限级展开下去,只需你在程序里设置一下,每一项菜单中包含有复选框,可以同时选中菜单的某项是否生效。 -
VB2010实现主窗体与MDI子窗体合并菜单及工具栏
2010-10-18 22:55:00合并菜单及工具栏不是新技术也不是新话题,我只是把网上流行的C#代码用VB改写了下,分享给习惯了VB的朋友。 代码不只适用于2010,以前的版本也可以跑,标题如此说只因为我提供的源码下载是VS2010的。 合并子窗体... -
API创建菜单VB翻译版
2020-07-21 01:23:20OnMenu,CreateActiveMenu,FullAllSubMenu,API_添加菜单项1,API_创建空白菜单,API_创建空白弹出式菜单,API_重画菜单,API_取菜单,API_取条目数量,API_取子菜单句柄,API_SetMenu,API_SetWindowLong,API_CallWindowProc -
易语言API创建菜单VB翻译版源码
2020-07-20 19:59:37易语言API创建菜单VB翻译版源码,OnMenu,CreateActiveMenu,FullAllSubMenu,API_添加菜单项1,API_创建空白菜单,API_创建空白弹出式菜单,API_重画菜单,API_取菜单,API_取条目数量,API_取子菜单句柄,API_SetMenu,API_... -
VB.NET MDI 主窗体与子窗体 菜单栏问题!
2014-12-21 13:31:541.如何将子界面中的菜单栏向上一...2.主窗体和子窗体都有菜单栏,但打开子窗体后有2个菜单栏如何解决? [img=https://img-bbs.csdn.net/upload/201412/21/1419139851_58945.jpg][/img] 3.菜单栏中细线是如何添加的? -
VB版窗体垂直折叠菜单特效.rar
2019-07-10 17:21:43VB版窗体垂直折叠菜单特效,一个垂直菜单控件的实例源码,生成类似Outlook软件左侧的操作菜单那样,点击后可以展开二级子菜单,再点击会收起菜单,实例中包括了两款菜单样式,当然自己也可重新定制菜单样式,如演示... -
VB实现右键扩展菜单以及按钮触发扩展菜单功能
2017-09-29 18:51:501、扩展菜单大致原理:利用PopUpMenu功能,事先做好扩展菜单以及子菜单,设置为隐藏属性,通过一定条件触发显示。 2、源码如下,供参考。 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''... -
WindowsForm实现折叠菜单面板(续)子菜单折叠
2021-01-06 18:49:11在上一篇文章中,简单实现vb.net教程了一个折叠菜单的面板,在这篇中将介绍实现子菜单的折叠与展开,其实实现的思路和之前的介绍是一样的,也是通过改变Panel控件的尺寸实现。 首先,我们需要将上篇文c#教程章中构建... -
怎么样用api函数AppendMenu新建子菜单
2009-05-09 11:42:36介绍在VB中利用api函数AppendMenu新建子菜单 -
VB6实现Office窗口风格的工具栏及多级菜单.rar
2019-07-10 19:18:26VB6.0实现Office窗口风格的工具栏及多级菜单,一级一级的弹出式菜单,可支持五级或六级的子菜单展开功能,可满足大部分的软件设计需求。虽然是仿写的,不过功能很强大啊,用在你的软件中也是很不错的选择。 -
VB 支持多行显示的Treeview树状菜单控件实例.rar
2019-07-10 17:32:28一个实用的VB TreeView控件,可以支持多行内容的显示,并且可以展开折叠(收起)的树状菜单控件源码,可自定义颜色的Treeview菜单树,如测试图所示的效果,一共演示了三个使用此Treeview完成的效果,菜单树中的每一... -
VB编的电子图书
2008-05-12 22:16:32如果你要打开电子图书的电脑类,用鼠标单击桌面的电脑类图标或用鼠标单击左下角的电子图书的菜单,再用鼠标单击电脑类,你就会看到对话框,(这表示电子图书桌面的图标已锁定,不能让你用鼠标单击电子图书桌面的图标... -
菜单表找出父菜单下所有子菜单_懒猪编程实例七:Visual Basic实现带美丽图标的菜单...
2020-12-11 11:07:07一般在程序中,菜单是以文本形式来显示的,如下图所示,很单调和乏味的文字如果在菜单的前面加上图标,那么这个程序界面就显得高大上了,怎么加呢,说实话在VB里面加这种图标还算是比较麻烦的,它需要用到各种API函数... -
vb.net学习总结一(动态菜单)
2006-11-22 17:28:00刚刚看了一个vb.net 实现动态菜单的例子。觉得很有意思。例子中用的主要技术有:菜单树 的 操作...这个例子实现了,用户可以在当前菜单的任意一个节点上添加一个子菜单,并为添加的子菜单添加事件。例子介绍如下: -
Office EXCEL 不用VB,你也可以制作自己的Excel菜单!
2017-03-05 14:49:00还记得这个讨厌的VB吗?...其实我们想要的仅仅是把自己写的宏封装一下,更好的调用而已。 打开工具,自定义,在命令菜单中选择新菜单,然后拖放右侧的新菜单到顶部的工具栏(比如我放到帮助...再拖一个子菜单(拖... -
VB.net2008打造精美电子日历程序
2013-05-03 20:00:48Visual Studio2008发布后,迅速...在文件 (File) 菜单上,单击新建项目 (New Project)。 在新建项目 (New Project) 对话框的模板 (Templates) 窗格中,单击 Windows 应用程序(Windows Application)。单击确定 (OK)。 -
[vb.net/mobile/移动编程]选中动态生成的菜单
2009-12-01 02:18:00在程序运行时可动态生成菜单,如导入某个文件夹下的数据库名称,用户可点击任一子菜单,进入该数据库下编辑浏览。但是如何在子菜单前面加“√”,即仅仅使该子菜单的Checked = True,而其他子菜单没有这个“√”,... -
VB版机房管理系统-添加子窗体的问题
2017-12-24 14:45:13我在将子窗体创建好的时候,运行时不显示,查阅后才知道是因为在MDI窗体上添加了Picture控件的原因,Picture把子窗体给挡住了 解决方法如下 1.首先要在模块中声明一个SetParent函数(该函数的功能就是改变某个子... -
vb treeview 展开子节点_【LabVIEW懒人系列教程小白入门】1.22LabVIEW子VI的创建与运用...
2020-12-13 11:30:04VI菜单的编辑可以运用于各种功能复杂的程序中,减少用户操作的复杂性,优化界面的美观度,通过上述方式也可以创建主菜单以及子菜单等功能,方便且快捷,记住,创建好后保存的菜单文件如果更改路径或者丢失,需要从新... -
VB 获取 Java 窗体_VB.Net高级窗体
2021-03-10 06:57:06在本章中,我们来学习以下概念和功能应用:在应用程序中添加菜单和子菜单在窗体中添加剪切,复制和粘贴功能锚定和停靠控件在窗体中模态窗体在应用程序中添加菜单和子菜单传统上,Menu,MainMenu,ContextMenu和... -
vb.net 中MDI子窗体对其父窗体属性的获取与修改
2008-04-15 14:57:00第一篇:如何在MDI子窗体中控制父窗体的属性等等 功能:比如打开一个子窗体后,就要设置父窗体中的某个菜单项或者按钮为不可见状态,诸如此类。 内容: MDI父窗体和MDI子窗体类定义如下: MDI父窗体: Class ...