日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網營銷解決方案
詳細概括VB.NET實現(xiàn)動態(tài)菜單的方法

VB.NET經過長時間的發(fā)展,很多用戶都很了解VB.NET實現(xiàn)動態(tài)菜單了,這里我發(fā)表一下個人理解,和大家討論討論。自己寫了一個VB.NET實現(xiàn)動態(tài)菜單的例子,覺得還不錯。例子中用的主要技術有:
◆菜單樹的操作
◆treeview的操作
◆利用堆棧實現(xiàn)菜單樹與treeview樹成員的對應
◆利用委托實現(xiàn)對象與事件的關聯(lián)

目前成都創(chuàng)新互聯(lián)公司已為上1000家的企業(yè)提供了網站建設、域名、網頁空間、網站托管運營、企業(yè)網站設計、海拉爾網站維護等服務,公司將堅持客戶導向、應用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

因為我也是初學者,所以有些詞匯用得可能不恰當,另外有些理解也可能有偏差。這個例子實現(xiàn)了VB.NET實現(xiàn)動態(tài)菜單,用戶可以在當前菜單的任意一個節(jié)點上添加一個子菜單,并為添加的子菜單添加事件。

例子介紹如下:

首先創(chuàng)建一個 VB.NET winform application

在form中添加一個菜單,取名為:MainItem,隨便添加幾個菜單項幾項。
◆添加一個textbox控件, 取名為:txtNewText
◆添加一個listbox控件, 取名為:lstHandlers
◆添加一個TreeView控件,取名為:tvMenu

具體代碼如下(其中有大部分代碼為自動生成):

 
 
 
  1. Public Class Form1Class Form1
  2. Inherits System.Windows.Forms.Form
  3. Windows 窗體設計器生成的代碼#Region " Windows 窗體設計器生成的代碼 "
  4. Public Sub New()Sub New()
  5. MyBase.New()
  6. '該調用是 Windows 窗體設計器所必需的。
  7. InitializeComponent()
  8. '在 InitializeComponent() 調用之后添加任何初始化
  9. End Sub
  10. '窗體重寫處置以清理組件列表。
  11. Protected Overloads Overrides Sub Dispose()Sub Dispose(ByVal disposing As Boolean)
  12. If disposing Then
  13. If Not (components Is Nothing) Then
  14. components.Dispose()
  15. End If
  16. End If
  17. MyBase.Dispose(disposing)
  18. End Sub
  19. 'Windows 窗體設計器所必需的
  20. Private components As System.ComponentModel.IContainer
  21. '注意:以下過程是 Windows 窗體設計器所必需的
  22. '可以使用 Windows 窗體設計器修改此過程。
  23. '不要使用代碼編輯器修改它。
  24. Friend WithEvents MainMenu As System.Windows.Forms.MainMenu
  25. Friend WithEvents MenuItem1 As System.Windows.Forms.MenuItem
  26. Friend WithEvents MenuItem2 As System.Windows.Forms.MenuItem
  27. Friend WithEvents MenuItem3 As System.Windows.Forms.MenuItem
  28. Friend WithEvents lstHandlers As System.Windows.Forms.ListBox
  29. Friend WithEvents Label3 As System.Windows.Forms.Label
  30. Friend WithEvents tvMenu As System.Windows.Forms.TreeView
  31. Friend WithEvents Label2 As System.Windows.Forms.Label
  32. Friend WithEvents Label1 As System.Windows.Forms.Label
  33. Friend WithEvents txtNewText As System.Windows.Forms.TextBox
  34. Friend WithEvents btnAddItem As System.Windows.Forms.Button
  35. ()> 
    Private Sub InitializeComponent()Sub InitializeComponent()
  36. Me.components = New System.ComponentModel.Container
  37. Me.MainMenu = New System.Windows.Forms.MainMenu(Me.components)
  38. Me.MenuItem1 = New System.Windows.Forms.MenuItem
  39. Me.MenuItem2 = New System.Windows.Forms.MenuItem
  40. Me.MenuItem3 = New System.Windows.Forms.MenuItem
  41. Me.lstHandlers = New System.Windows.Forms.ListBox
  42. Me.Label3 = New System.Windows.Forms.Label
  43. Me.tvMenu = New System.Windows.Forms.TreeView
  44. Me.Label2 = New System.Windows.Forms.Label
  45. Me.Label1 = New System.Windows.Forms.Label
  46. Me.txtNewText = New System.Windows.Forms.TextBox
  47. Me.btnAddItem = New System.Windows.Forms.Button
  48. Me.SuspendLayout()
  49. '
  50. 'MainMenu
  51. '
  52. Me.MainMenu.MenuItems.AddRange
    (New System.Windows.Forms.MenuItem() {Me.MenuItem1, Me.MenuItem2, Me.MenuItem3})
  53. '
  54. 'MenuItem1
  55. '
  56. Me.MenuItem1.Index = 0
  57. Me.MenuItem1.Text = "菜單1"
  58. '
  59. 'MenuItem2
  60. '
  61. Me.MenuItem2.Index = 1
  62. Me.MenuItem2.Text = "菜單2"
  63. '
  64. 'MenuItem3
  65. '
  66. Me.MenuItem3.Index = 2
  67. Me.MenuItem3.Text = "菜單3"
  68. '
  69. 'lstHandlers
  70. '
  71. Me.lstHandlers.ItemHeight = 12
  72. Me.lstHandlers.Location = New System.Drawing.Point(88, 64)
  73. Me.lstHandlers.Name = "lstHandlers"
  74. Me.lstHandlers.Size = New System.Drawing.Size(136, 112)
  75. Me.lstHandlers.TabIndex = 13
  76. '
  77. 'Label3
  78. '
  79. Me.Label3.Location = New System.Drawing.Point(56, 64)
  80. Me.Label3.Name = "Label3"
  81. Me.Label3.Size = New System.Drawing.Size(32, 16)
  82. Me.Label3.TabIndex = 12
  83. Me.Label3.Text = "事件"
  84. '
  85. 'tvMenu
  86. '
  87. Me.tvMenu.Location = New System.Drawing.Point(280, 24)
  88. Me.tvMenu.Name = "tvMenu"
  89. Me.tvMenu.Size = New System.Drawing.Size(152, 152)
  90. Me.tvMenu.TabIndex = 11
  91. '
  92. 'Label2
  93. '
  94. Me.Label2.Location = New System.Drawing.Point(232, 32)
  95. Me.Label2.Name = "Label2"
  96. Me.Label2.Size = New System.Drawing.Size(48, 16)
  97. Me.Label2.TabIndex = 10
  98. Me.Label2.Text = "添加到"
  99. '
  100. 'Label1
  101. '
  102. Me.Label1.Location = New System.Drawing.Point(8, 32)
  103. Me.Label1.Name = "Label1"
  104. Me.Label1.Size = New System.Drawing.Size(80, 16)
  105. Me.Label1.TabIndex = 9
  106. Me.Label1.Text = "新菜單項文字"
  107. '
  108. 'txtNewText
  109. '
  110. Me.txtNewText.Location = New System.Drawing.Point(88, 24)
  111. Me.txtNewText.Name = "txtNewText"
  112. Me.txtNewText.Size = New System.Drawing.Size(136, 21)
  113. Me.txtNewText.TabIndex = 8
  114. '
  115. 'btnAddItem
  116. '
  117. Me.btnAddItem.Location = New System.Drawing.Point(168, 192)
  118. Me.btnAddItem.Name = "btnAddItem"
  119. Me.btnAddItem.Size = New System.Drawing.Size(80, 24)
  120. Me.btnAddItem.TabIndex = 7
  121. Me.btnAddItem.Text = "添加菜單項"
  122. '
  123. 'Form1
  124. '
  125. Me.AutoScaleBaseSize = New System.Drawing.Size(6, 14)
  126. Me.ClientSize = New System.Drawing.Size(448, 225)
  127. Me.Controls.Add(Me.lstHandlers)
  128. Me.Controls.Add(Me.Label3)
  129. Me.Controls.Add(Me.tvMenu)
  130. Me.Controls.Add(Me.Label2)
  131. Me.Controls.Add(Me.Label1)
  132. Me.Controls.Add(Me.txtNewText)
  133. Me.Controls.Add(Me.btnAddItem)
  134. MeMe.Menu = Me.MainMenu
  135. Me.Name = "Form1"
  136. Me.Text = "Form1"
  137. Me.ResumeLayout(False)
  138. Me.PerformLayout()
  139. End Sub
  140. #End Region
  141. Private eHandlers(3) As EventHandler '定義事件方法集合
  142. Private Sub ShowHelloWorld()Sub ShowHelloWorld(ByVal sender As System.Object, 
    ByVal e As System.EventArgs)
  143. MessageBox.Show("Hello World!")
  144. End Sub
  145. Private Sub ShowMenuItemText()Sub ShowMenuItemText(ByVal sender As System.Object, 
    ByVal e As System.EventArgs)
  146. Dim mItem As MenuItem
  147. mItem = CType(sender, MenuItem)
  148. MessageBox.Show(mItem.Text)
  149. End Sub
  150. Private Sub ShowMenuItemIndex()Sub ShowMenuItemIndex(ByVal sender As System.Object, 
    ByVal e As System.EventArgs)
  151. Dim mItem As MenuItem
  152. mItem = CType(sender, MenuItem)
  153. MessageBox.Show(mItem.Index)
  154. End Sub
  155. Private Sub ShowCurDateTime()Sub ShowCurDateTime(ByVal sender As System.Object, 
    ByVal e As System.EventArgs)
  156. Dim strDate As String = DateTime.Now.ToString()
  157. MessageBox.Show(strDate)
  158. End Sub
  159. Private Sub MenuItemToNode()Sub MenuItemToNode(ByVal menuItems As Menu.MenuItemCollection, 
    ByVal targetNodes As TreeNodeCollection)
  160. 'TreeNodeCollection 代表一個樹結點集合,每一個節(jié)點下的兒子節(jié)點的集合
  161. 'MenuItemCollection 代表一個菜單項的集合,也是菜單樹中某一菜單下的一級子菜單的菜單項的集合
  162. Dim subItem As MenuItem
  163. For Each subItem In menuItems
  164. Dim subNode As New TreeNode(subItem.Text)
  165. If subItem.MenuItems.Count > 0 Then
  166. MenuItemToNode(subItem.MenuItems, subNode.Nodes)'遞歸處理
  167. End If
  168. targetNodes.Add(subNode)
  169. Next
  170. End Sub
  171. Private Function FindMenuItem()Function FindMenuItem(ByVal selectedNode As TreeNode) As MenuItem
  172. Dim indexStack As New Collections.Stack()'定一個堆棧對象
  173. '將樹結點從當前節(jié)點一直到根的一條路徑壓入堆棧
  174. Do Until selectedNode Is Nothing
  175. indexStack.Push(selectedNode.Index)
  176. selectedNodeselectedNode = selectedNode.Parent
  177. Loop
  178. '再利用菜單與treeview樹一一對應的特點.根據節(jié)點的index,找到對應的菜單項.然后沿著路徑找到當前的菜單項
  179. Dim menuItem As MenuItem = MainMenu.MenuItems(indexStack.Pop())
  180. Do Until indexStack.Count = 0
  181. menuItemmenuItem = menuItem.MenuItems(indexStack.Pop())
  182. Loop
  183. '返回當前菜單項
  184. Return menuItem
  185. End Function
  186. Private Sub btnAddItem_Click()Sub btnAddItem_Click(ByVal sender As System.Object, 
    ByVal e As System.EventArgs) Handles btnAddItem.Click
  187. If txtNewText.Text = "" Then Exit Sub
  188. If tvMenu.SelectedNode Is Nothing Then Exit Sub
  189. Dim correspondingMenuItem As MenuItem
  190. Dim newMenuItem As MenuItem
  191. correspondingMenuItem = FindMenuItem(tvMenu.SelectedNode)'將節(jié)點轉成菜單項
  192. newMenuItem = New MenuItem(txtNewText.Text) '生成新加的菜單項
  193. If lstHandlers.SelectedIndex >= 0 Then
  194. AddHandler newMenuItem.Click, eHandlers(lstHandlers.SelectedIndex) '建立事件的委托
  195. End If
  196. correspondingMenuItem.MenuItems.Add(newMenuItem)'將新菜單加到菜單樹中
  197. tvMenu.Nodes.Clear() '清空treeview樹
  198. MenuItemToNode(MainMenu.MenuItems, tvMenu.Nodes) '將最新的菜單呈現(xiàn)成樹
  199. tvMenu.ExpandAll() '展開樹
  200. End Sub
  201. Private Sub Form1_Load()Sub Form1_Load(ByVal sender As System.Object, 
    ByVal e As System.EventArgs) Handles MyBase.Load
  202. MenuItemToNode(MainMenu.MenuItems, tvMenu.Nodes)'將菜單樹呈現(xiàn)到treeview中
  203. tvMenu.ExpandAll() '展開他
  204. '將三個事件方法放入集合
  205. eHandlers(0) = AddressOf ShowHelloWorld
  206. eHandlers(1) = AddressOf ShowMenuItemText
  207. eHandlers(2) = AddressOf ShowMenuItemIndex
  208. eHandlers(3) = AddressOf ShowCurDateTime
  209. '將事件方法名字寫入列表
  210. Dim i As Integer
  211. For i = 0 To eHandlers.Length - 1
  212. lstHandlers.Items.Add(eHandlers(i).Method.Name)
  213. Next
  214. End Sub
  215. End Class

新聞標題:詳細概括VB.NET實現(xiàn)動態(tài)菜單的方法
本文地址:http://m.5511xx.com/article/dhdogjj.html