精华内容
下载资源
问答
  • 建立菜单如下 文件 ...............变化 (不可见) ............................................显示 ...............退出 下面通过弹出“变化”菜单,触发"显示"事件,使得上一级菜单”变化“可以显示...

    建立菜单如下

    文件

    ...............变化  (不可见)

    ............................................显示

    ...............退出


    下面通过弹出“变化”菜单,触发"显示"事件,使得上一级菜单”变化“可以显示出来

    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程序设计:动态添加右键菜单和子菜单 具体分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下怎样判断菜单下面是否还有子菜单? 它没有hasChildren属性。
  • 现在的问题:窗体1中通过按钮弹出菜单form2 show 1方式打开的form2,新窗体中的菜单无法弹出,但是通过默认位置的菜单同样form2 show 1方式打开form2,窗体2中的菜单确能正常打开,如下图所示,除了红色方式打开的新...
  • '加入子菜单,令其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

     

    展开全文
  • 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" ...

     

     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 制作一个动态菜单,面向VB新手的范例,这种形式的菜单可能是大家见的比较多的了,点击菜单,动态显示出二级子菜单,与Windows窗口中的菜单大同小异。  为了更好的演示功能,这些菜单还定义了动作,比如弹出...
  • VB TreeView 多级展开的树形菜单,可展开、折叠多级节点的菜单VB6下顺利编译,它可以无限级展开下去,只需你在程序里设置一下,每一项菜单中包含有复选框,可以同时选中菜单的某项是否生效。
  • 合并菜单及工具栏不是新技术也不是新话题,我只是把网上流行的C#代码用VB改写了下,分享给习惯了VB的朋友。 代码不只适用于2010,以前的版本也可以跑,标题如此说只因为我提供的源码下载是VS2010的。 合并窗体...
  • API创建菜单VB翻译版

    2020-07-21 01:23:20
    OnMenu,CreateActiveMenu,FullAllSubMenu,API_添加菜单项1,API_创建空白菜单,API_创建空白弹出式菜单,API_重画菜单,API_取菜单,API_取条目数量,API_取子菜单句柄,API_SetMenu,API_SetWindowLong,API_CallWindowProc
  • 易语言API创建菜单VB翻译版源码,OnMenu,CreateActiveMenu,FullAllSubMenu,API_添加菜单项1,API_创建空白菜单,API_创建空白弹出式菜单,API_重画菜单,API_取菜单,API_取条目数量,API_取子菜单句柄,API_SetMenu,API_...
  • 1.如何将界面中的菜单栏向上一...2.主窗体和窗体都有菜单栏,但打开窗体后有2个菜单栏如何解决? [img=https://img-bbs.csdn.net/upload/201412/21/1419139851_58945.jpg][/img] 3.菜单栏中细线是如何添加的?
  • VB版窗体垂直折叠菜单特效,一个垂直菜单控件的实例源码,生成类似Outlook软件左侧的操作菜单那样,点击后可以展开二级子菜单,再点击会收起菜单,实例中包括了两款菜单样式,当然自己也可重新定制菜单样式,如演示...
  • 1、扩展菜单大致原理:利用PopUpMenu功能,事先做好扩展菜单以及子菜单,设置为隐藏属性,通过一定条件触发显示。 2、源码如下,供参考。 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''...
  • 在上一篇文章中,简单实现vb.net教程了一个折叠菜单的面板,在这篇中将介绍实现子菜单的折叠与展开,其实实现的思路和之前的介绍是一样的,也是通过改变Panel控件的尺寸实现。 首先,我们需要将上篇文c#教程章中构建...
  • 介绍在VB中利用api函数AppendMenu新建子菜单
  • VB6.0实现Office窗口风格的工具栏及多级菜单,一级一级的弹出式菜单,可支持五级或六级的子菜单展开功能,可满足大部分的软件设计需求。虽然是仿写的,不过功能很强大啊,用在你的软件中也是很不错的选择。
  • 一个实用的VB TreeView控件,可以支持多行内容的显示,并且可以展开折叠(收起)的树状菜单控件源码,可自定义颜色的Treeview菜单树,如测试图所示的效果,一共演示了三个使用此Treeview完成的效果,菜单树中的每一...
  • VB编的电子图书

    2008-05-12 22:16:32
    如果你要打开电子图书的电脑类,用鼠标单击桌面的电脑类图标或用鼠标单击左下角的电子图书的菜单,再用鼠标单击电脑类,你就会看到对话框,(这表示电子图书桌面的图标已锁定,不能让你用鼠标单击电子图书桌面的图标...
  • 一般在程序中,菜单是以文本形式来显示的,如下图所示,很单调和乏味的文字如果在菜单的前面加上图标,那么这个程序界面就显得高大上了,怎么加呢,说实话在VB里面加这种图标还算是比较麻烦的,它需要用到各种API函数...
  • vb.net学习总结一(动态菜单

    千次阅读 2006-11-22 17:28:00
    刚刚看了一个vb.net 实现动态菜单的例子。觉得很有意思。例子中用的主要技术有:菜单树 的 操作...这个例子实现了,用户可以在当前菜单的任意一个节点上添加一个子菜单,并为添加的子菜单添加事件。例子介绍如下:
  • 还记得这个讨厌的VB吗?...其实我们想要的仅仅是把自己写的宏封装一下,更好的调用而已。 打开工具,自定义,在命令菜单中选择新菜单,然后拖放右侧的新菜单到顶部的工具栏(比如我放到帮助...再拖一个子菜单(拖...
  • Visual Studio2008发布后,迅速...在文件 (File) 菜单上,单击新建项目 (New Project)。 在新建项目 (New Project) 对话框的模板 (Templates) 窗格中,单击 Windows 应用程序(Windows Application)。单击确定 (OK)。
  • 在程序运行时可动态生成菜单,如导入某个文件夹下的数据库名称,用户可点击任一子菜单,进入该数据库下编辑浏览。但是如何在子菜单前面加“√”,即仅仅使该子菜单的Checked = True,而其他子菜单没有这个“√”,...
  • 我在将窗体创建好的时候,运行时不显示,查阅后才知道是因为在MDI窗体上添加了Picture控件的原因,Picture把子窗体给挡住了 解决方法如下 1.首先要在模块中声明一个SetParent函数(该函数的功能就是改变某个子...
  • VI菜单的编辑可以运用于各种功能复杂的程序中,减少用户操作的复杂性,优化界面的美观度,通过上述方式也可以创建主菜单以及子菜单等功能,方便且快捷,记住,创建好后保存的菜单文件如果更改路径或者丢失,需要从新...
  • 在本章中,我们来学习以下概念和功能应用:在应用程序中添加菜单和子菜单在窗体中添加剪切,复制和粘贴功能锚定和停靠控件在窗体中模态窗体在应用程序中添加菜单和子菜单传统上,Menu,MainMenu,ContextMenu和...
  • 第一篇:如何在MDI窗体中控制父窗体的属性等等 功能:比如打开一个窗体后,就要设置父窗体中的某个菜单项或者按钮为不可见状态,诸如此类。 内容: MDI父窗体和MDI窗体类定义如下: MDI父窗体: Class ...

空空如也

空空如也

1 2 3 4 5 ... 12
收藏数 240
精华内容 96
关键字:

vb子菜单