VB.net 动态添加菜单响应单击事件

以前 VB 6.0 我要调一堆 API 感觉好过瘾 呵呵 现在找不到这种感觉了 哈!记得vb 6 的 时候生气用Win32写了个Clock  掉了上百个 API 连VB 6 的窗体都没用, 那个叫过瘾 一切都在控制中的感觉真好。看来我还是适合用 MASM Win32 的。哈哈 废话 到此结束。动态添加菜单在 .net 中很容易的。

首先建立一个XML 文件用来存储 菜单信息 (本例使用 DataHelper.xml)
 
<?xml version="1.0" encoding="utf-8" ?>
<DataHelper>
  <Menu>
    <IsSeparator>0</IsSeparator>
    <IsTopMenu>0</IsTopMenu>
    <TopMenuItemIndex>2</TopMenuItemIndex>
    <SubMenuItemIndex></SubMenuItemIndex>
    <MenuID>1</MenuID>
    <ParentID>0</ParentID> 
    <Text>基本数据库(&amp;B)...</Text>
    <Image></Image>
    <ToolTipText></ToolTipText>
    <Visible>True</Visible>
    <Name>DataConvert</Name>
    <ShortcutKeys></ShortcutKeys>
  </Menu>
  <Menu>
    <IsSeparator>1</IsSeparator>
    <IsTopMenu>0</IsTopMenu>
    <TopMenuItemIndex>2</TopMenuItemIndex>
    <SubMenuItemIndex></SubMenuItemIndex>
    <MenuID>2</MenuID>
    <ParentID>0</ParentID>
  </Menu>

  <Menu>
    <IsSeparator>0</IsSeparator>
    <IsTopMenu>0</IsTopMenu>
    <TopMenuItemIndex>2</TopMenuItemIndex>
    <SubMenuItemIndex></SubMenuItemIndex>
    <MenuID>2</MenuID>
    <ParentID>0</ParentID>
    <Text>计生系统(&amp;J)...</Text>
    <Image></Image>
    <ToolTipText></ToolTipText>
    <Visible></Visible>
    <Name>DataConvert</Name>
    <ShortcutKeys>131140</ShortcutKeys>
  </Menu>

  <Menu>
    <IsSeparator>1</IsSeparator>
    <IsTopMenu>0</IsTopMenu>
    <TopMenuItemIndex>2</TopMenuItemIndex>
    <SubMenuItemIndex></SubMenuItemIndex>
    <MenuID>2</MenuID>
    <ParentID>0</ParentID>
  </Menu>

  <Menu>
    <IsSeparator>0</IsSeparator>
    <IsTopMenu>0</IsTopMenu>
    <TopMenuItemIndex>2</TopMenuItemIndex>
    <SubMenuItemIndex></SubMenuItemIndex>
    <MenuID>3</MenuID>
    <ParentID>0</ParentID>
    <Text>党员系统(&amp;D)...</Text>
    <Image></Image>
    <ToolTipText></ToolTipText>
    <Visible></Visible>
    <Name>DataConvert</Name>
    <ShortcutKeys></ShortcutKeys>
  </Menu>

  <Menu>
    <IsSeparator>1</IsSeparator>
    <IsTopMenu>0</IsTopMenu>
    <TopMenuItemIndex>2</TopMenuItemIndex>
    <SubMenuItemIndex></SubMenuItemIndex>
    <MenuID>2</MenuID>
    <ParentID>0</ParentID>
  </Menu>

  <Menu>
    <IsSeparator>0</IsSeparator>
    <IsTopMenu>0</IsTopMenu>
    <TopMenuItemIndex>2</TopMenuItemIndex>
    <SubMenuItemIndex></SubMenuItemIndex>
    <MenuID>4</MenuID>
    <ParentID>0</ParentID>
    <Text>民政系统(&amp;M)...</Text>
    <Image></Image>
    <ToolTipText></ToolTipText>
    <Visible></Visible>
    <Name>DataConvert</Name>
    <ShortcutKeys></ShortcutKeys>
  </Menu>
</DataHelper>

好了第一步开始,读取XML文件 我们使用 DataSet 来干这活,不过我是在 DataHerlper.Common 工程来干这事的。哇 分层阿!
这个是个结构 我用的 看取那个Table

 

Imports  System.Drawing
Imports  System.Windows.Forms

Namespace DataHelper.Common

    
Public Enum DataHelperConfigTableName
        DropDownMenu 
= 0
        Plugins 
= 1
    
End Enum


End Namespace


Imports  System.Data
Imports  DataHelper.Common.Caching
Imports  System.Windows.Forms

Namespace DataHelper.Common
    
Public Class SharedClass

        
Public Shared Function GetDataHelperConfig(Optional ByVal TableName As DataHelperConfigTableName = DataHelperConfigTableName.DropDownMenu) As DataTable
            
Dim strDataHelperConfigFile As String
            
Dim ds As New DataSet
            
Dim dt As New DataTable

            strDataHelperConfigFile 
= Application.StartupPath & "ConfigDataHelper.xml" 'Application.StartupPath

            ds 
= DataCache.GetCache("DataHelperConfig")
            
If ds Is Nothing Then
                
Dim xmlReader As XmlTextReader = New XmlTextReader(strDataHelperConfigFile)
                ds 
= New DataSet
                ds.ReadXml(xmlReader)
                dt 
= ds.Tables(TableName)
                DataCache.Insert(
"DataHelperConfig", ds, DataCache.CreateFileCacheDependency(strDataHelperConfigFile))
            
Else
                dt 
= ds.Tables(TableName)
            
End If
            
Return dt
        
End Function


    
End Class

End Namespace


我们得到菜单信息了接下来就要动态添加菜单了 这又是一个工程(DataHelper.UserInterface) 分层吗
' **********************************************************************************************************
'
 Programmer By Shadow (QQ:33512603)
'
 User Interface MainMenu  Class
'
 The MainMenu class create menu for localappliction 
'
 Corpright(C) 2006 Jiang Jian
'
**********************************************************************************************************
'
 程序设计:江建
'
**********************************************************************************************************

Imports  System.IO
Imports  System.Windows.Forms
Imports  DataHelper.Common
Imports  DataHelper.PluginsInterface

Namespace DataHelper.UserInterface
    
Public Class MainMenu
        
Private MenuClick As New MainMenuClick

Public Methods

Private Methods

    
End Class

End Namespace



' **********************************************************************************************************
'
 Programmer By Shadow (QQ:33512603)
'
 User Interface MainMenuClick  Class
'
 The MainMenuClick class response menu click event
'
 Corpright(C) 2006 Jiang Jian
'
**********************************************************************************************************
'
 程序设计:江建
'
**********************************************************************************************************

Imports  System.Diagnostics
Imports  System.Windows.Forms


Namespace DataHelper.UserInterface

    
Public Class MainMenuClick
        
Private Declare Function SetParent Lib "user32" Alias "SetParent" (ByVal hWndChild As IntegerByVal hWndNewParent As IntegerAs Integer
        
Private Declare Function SetWindowPos Lib "user32" (ByRef hwnd As IntegerByRef hWndInsertAfter As IntegerByVal x As IntegerByVal y As IntegerByVal cx As Integer

ByVal cy As IntegerByVal wFlags As IntegerAs Integer

        
Private Const SWP_NOSIZE = &H1
        
Private Const SWP_NOMOVE = &H2

        
Private DataConvert As New Process

Public Methods

Overrides Methods


    
End Class

End Namespace


最后是测试 哈哈 终于完了 在你的主窗体下 加入一个 MenuScript 控件 名称为 MainMenu 这次测试未添加 顶级菜单 如果要添加顶级菜单 请修改XML文件 IsTopMenu 为1

   Private   Sub frmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        
Dim test As New MainMenu
        test.CreateMenu(
Me.MainMenu)
  
End Sub

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值