1. 程式人生 > >VB.net 動態新增選單響應單擊事件

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

    
PublicEnum DataHelperConfigTableName
        DropDownMenu 
=0
        Plugins 
=1
    
End Enum


End Namespace


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

Namespace DataHelper.Common
    
PublicClass SharedClass

        
PublicSharedFunction GetDataHelperConfig(OptionalByVal TableName As DataHelperConfigTableName = DataHelperConfigTableName.DropDownMenu) As DataTable
            
Dim strDataHelperConfigFile AsString
            
Dim ds AsNew DataSet
            
Dim dt AsNew DataTable

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

            ds 
= DataCache.GetCache("DataHelperConfig")
            
If ds IsNothingThen
                
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)
            
EndIf
            
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
    
PublicClass MainMenu
        
Private MenuClick AsNew MainMenuClick

Public Methods

Private Methods