怎样用代码执行动态生成的菜单的单击事件?

LSSQXT 2009-02-03 05:13:48
现在动态生成了一个菜单,请问要怎样用代码执行动态生成的菜单项的单击事件?

比如Form_Load的时候动态生成菜单,并且执行该菜单下某一菜单项的单击事件?
...全文
154 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
LSSQXT 2009-02-04
  • 打赏
  • 举报
回复

CFWSubMenu = New ToolStripMenuItem(ArrayT(0))
AddHandler CFWSubMenu.Click, AddressOf Select_City
'添加菜单项目的单击事件
If i = 0 Then CFWSubMenu.PerformClick()
'默认执行第一项菜单的单击事件
站点ToolStripMenuItem.DropDownItems.Add(CFWSubMenu)


原来在AddHandler后面马上就可以执行需要的单击事件
用menu.PerformClick()
pjagz 2009-02-03
  • 打赏
  • 举报
回复
Public Class Form1

Friend WithEvents MenuStrip1 As New System.Windows.Forms.MenuStrip
Friend WithEvents CheckBox1 As New System.Windows.Forms.CheckBox
Friend WithEvents TextBox1 As New System.Windows.Forms.TextBox
Friend WithEvents Button1 As New System.Windows.Forms.Button

Dim Menu1 As System.Windows.Forms.ToolStripMenuItem
Dim Menu2 As System.Windows.Forms.ToolStripMenuItem


Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

CheckBox1.Text = "子菜单"
CheckBox1.Location = New Point(113, 183)
CheckBox1.Parent = Me

'---------------------------
TextBox1.Location = New Point(116, 58)
TextBox1.Width = 180
TextBox1.Parent = Me
TextBox1.Text = "添加新菜单的名"
'---------------------------
Button1.Location = New Point(282, 195)
Button1.Text = "添加"
Button1.Parent = Me
AddHandler Button1.Click, AddressOf Button1_Click

'------------------------------------
MenuStrip1.Parent = Me
Dim Menu1 As New System.Windows.Forms.ToolStripMenuItem("菜单A")
Dim Menu2 As New System.Windows.Forms.ToolStripMenuItem("菜单B")
MenuStrip1.Name = "MenuStrip1"
Menu1.Name = "Menu1"
Menu2.Name = "Menu2"
MenuStrip1.Items.Add(Menu1)
MenuStrip1.Items.Add(Menu2)

' AddHandler MenuStrip1.MouseClick, AddressOf MenuStrip1_MouseClick

AddHandler Menu1.Click, AddressOf Menu1_Click
AddHandler Menu2.Click, AddressOf Menu2_Click



End Sub

Private Sub MenuStrip1_MouseClick(ByVal sender As System.Object, ByVal e As System.EventArgs)

Stop

End Sub


Private Sub Menu1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)

Menu1 = CType(sender, ToolStripMenuItem)
TextBox1.Text = "动态添加" & Menu1.Text
Menu2 = Nothing
End Sub

Private Sub Menu2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)

Menu2 = CType(sender, ToolStripMenuItem)
TextBox1.Text = "动态添加" & Menu2.Text
Menu1 = Nothing

End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)

'-------动态添加菜单----------------
If TextBox1.Text = "" Then MsgBox("请单击要添加的菜单") : Exit Sub

'-----------------------
Dim NewAddMeu As New System.Windows.Forms.ToolStripMenuItem(TextBox1.Text)

If Not Menu1 Is Nothing Then
Menu1.DropDownItems.Add(NewAddMeu)
'菜单识别标志,我没有找到菜单的索引,权用此法。须优化
NewAddMeu.Name = "A" & Menu1.DropDownItems.Count
NewAddMeu.ImageKey = "A" & Menu1.DropDownItems.Count
AddHandler NewAddMeu.Click, AddressOf NewAddMeu_Click

End If
'--------------------------------------------
If Not Menu2 Is Nothing Then
Menu2.DropDownItems.Add(NewAddMeu)
'菜单识别标志,我没有找到菜单的索引,权用此法。须优化
NewAddMeu.ImageKey = "B" & Menu2.DropDownItems.Count
NewAddMeu.Name = "B" & Menu2.DropDownItems.Count
AddHandler NewAddMeu.Click, AddressOf NewAddMeu_Click
End If

'此行没用
If Menu1 Is Nothing And Menu2 Is Nothing Then MsgBox("请单击要添加的菜单")


End Sub


Private Sub NewAddMeu_Click(ByVal sender As Object, ByVal e As EventArgs)
'----所有子菜单事件-------须要对识别标志的判断------
Dim Meusip As ToolStripMenuItem = CType(sender, ToolStripMenuItem)
If Meusip.Name = Meusip.ImageKey Then MsgBox(Meusip.ImageKey)

If CheckBox1.Checked = True Then
If Meusip.Name.TrimEnd(New Char() {"1", "2", "3", "4", "5", "6", "7", "8", "9"}) = "A" Then Menu1 = Meusip
If Meusip.Name.TrimEnd(New Char() {"1", "2", "3", "4", "5", "6", "7", "8", "9"}) = "B" Then Menu2 = Meusip
TextBox1.Text = Meusip.Text
End If

End Sub

End Class

'VB.Net 2005 动态菜单示例
LSSQXT 2009-02-03
  • 打赏
  • 举报
回复
上面的程序是把menu.txt内容读出,在站点下生成下拉菜单,运行时没问题,但我不知道怎么样用代码去执行某一菜单项的单击事件
//////////////
3
类别,文件,识别码,存盘路径
本地,City1.txt,LWF,F:\CWF\Product
全省,City2.txt,PWF,F:\CWF\
旅游景点,Tourist_City.txt,TWF,F:\CWF\Pr
//////////////

LSSQXT 2009-02-03
  • 打赏
  • 举报
回复

Private Sub DynamicMenu(ByVal sender As System.Object, ByVal e As System.EventArgs)
Dim TempString As String
Dim i As Integer = 0
Dim ArrayT() As String
Dim CFWSubmenu As ToolStripMenuItem
Dim sr As New StreamReader("menu.txt", System.Text.Encoding.GetEncoding("GB2312"))
TempString = sr.ReadLine
ReDim Para(CInt(TempString), 3)
TempString = sr.ReadLine
ArrayT = Split(TempString, ",")
站点ToolStripMenuItem.Text = ArrayT(0) & "(&C)"
Do While sr.Peek > -1
TempString = sr.ReadLine
ArrayT = Split(TempString, ",")
For j As Integer = 0 To UBound(ArrayT)
Para(i, j) = ArrayT(j)
Next
CFWSubmenu = New ToolStripMenuItem(ArrayT(0))
AddHandler CFWSubmenu.Click, AddressOf Select_City
站点ToolStripMenuItem.DropDownItems.Add(CFWSubmenu)
i += 1
Loop
sr.Close()
End Sub
Private Sub Select_City(ByVal sender As System.Object, ByVal e As System.EventArgs)
For i As Integer = 0 To UBound(Para, 1)
Dim ssss As String = sender.ToString
If Para(i, 0) = sender.ToString Then
CityClass = Para(i, 0)
StationsFile = Para(i, 1)
WF_Category = Para(i, 2)
Save_Path = Para(i, 3)
Exit For
End If
Next
End Sub
wanghui0380 2009-02-03
  • 打赏
  • 举报
回复
把事件挂接到同一个事件处理函数上即可
CsToD 2009-02-03
  • 打赏
  • 举报
回复
单击的话,可能有个PerformClick方法
但是你直接调用这个事件订阅的方法不就完了
比如this.Cliek+=Some_Click;
void Some_Click(object obj,EventArgs e)
{
...
}

直接调用:Some_Click(null,null);
_NET2004 2009-02-03
  • 打赏
  • 举报
回复
是先生成再执行吗?
晓轩 2009-02-03
  • 打赏
  • 举报
回复
Dim menuitems As New Windows.Forms.MenuItem
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
AddHandler menuitems.Click, AddressOf menu_click
menu_click(sender, e)'or menu_click(nothing,nothing)
End Sub

Private Sub menu_click(ByVal sender As System.Object, ByVal e As System.EventArgs)
MsgBox("Ok")
End Sub
y042017 2009-02-03
  • 打赏
  • 举报
回复
你是说动态生成控件,并执行其中的事件吗??

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧