成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

詳細概括VB.NET實現動態(tài)菜單的方法

開發(fā) 后端
這里介紹VB.NET實現動態(tài)菜單,這個例子實現了VB.NET實現動態(tài)菜單,用戶可以在當前菜單的任意一個節(jié)點上添加一個子菜單,并為添加的子菜單添加事件。

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

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

【編輯推薦】

  1. VB.NET水印類整合水印技術
  2. 實例講述VB.NET使用Log4Net
  3. 淺析利用VB.NET啟動Smartphone常規(guī)方法
  4. 三分鐘學會VB.NET轉換形態(tài)
  5. 自己動手改寫VB.NET內存指針
責任編輯:佚名 來源: 賽迪網
相關推薦

2009-11-03 10:00:20

VB.NET New方

2009-10-14 16:46:25

VB.NET OnSt

2009-10-27 11:32:42

VB.NET Disp

2009-11-03 10:51:33

VB.NET共享

2009-10-14 14:04:29

VB.NET創(chuàng)建Web

2009-10-26 15:57:07

VB.NET使用Ora

2009-10-13 14:50:59

VB.NET Envi

2010-01-12 15:54:47

VB.NET動態(tài)控件數

2009-10-29 16:23:42

VB.NET實現IEn

2009-10-14 10:19:57

VB.NET Doma

2009-10-15 17:50:48

VB.NET Spli

2009-10-12 15:02:51

VB.NET動態(tài)控件

2010-01-22 18:14:49

VB.NET菜單組件

2009-10-28 10:51:32

VB.NET默認屬性

2009-10-14 15:34:29

VB.NET窗體編程模

2009-10-14 13:15:09

VB.NET數據綁定

2009-11-10 12:42:47

VB.NET Prin

2009-10-23 14:06:07

VB.NET類對象

2009-10-21 10:05:30

VB.NET運行環(huán)境

2009-10-15 10:09:14

PCC和桌面電腦VB.NET實現
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产激情视频在线 | 精品亚洲视频在线 | 国产黄色大片在线观看 | 国产精品久久久 | 欧美精品在线一区 | 久久久夜色精品亚洲 | 九九在线| h视频免费观看 | 国产高清免费视频 | 欧美成人h版在线观看 | 欧洲亚洲精品久久久久 | 天天干天天操天天射 | 国产精品视频在线播放 | 久久久综合精品 | 亚洲免费在线 | 日韩电影中文字幕在线观看 | 国产午夜精品一区二区三区嫩草 | 久久这里只有精品首页 | 欧美日韩亚洲视频 | 综合第一页 | av日韩精品 | 超碰伊人久久 | 69福利影院 | 久久久成人免费一区二区 | 久久99视频 | 国产精品久久久久久久久久99 | 午夜视频在线免费观看 | 久久在看 | 欧洲精品一区 | 欧美一区二区三区在线观看视频 | 精品欧美一区二区中文字幕视频 | 综合久久一区 | 免费艹逼视频 | 日韩看片 | 在线观看视频91 | 成人九色 | 精品国产一区二区三区av片 | 国产精品久久久久久久免费观看 | 午夜视频在线免费观看 | 四虎在线视频 | 欧美一级黄色片 |