首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

MenuStrip菜單加載問題解决方法

2012-02-21 
MenuStrip菜單加載問題我現在想動態加載菜單請教怎么做menumain.Items.Clear()ToolStripMenuItemmenutola

MenuStrip菜單加載問題
我現在想動態加載菜單
請教怎么做
  menumain.Items.Clear();
                     
                ToolStripMenuItem   menutola   =   new   ToolStripMenuItem();
                ToolStripMenuItem   menutol1   =   new   ToolStripMenuItem();
                ToolStripMenuItem   menutol2   =   new   ToolStripMenuItem();
                  ToolStripMenuItem   menuto3   =   new   ToolStripMenuItem();
                ToolStripMenuItem   menutol4   =   new   ToolStripMenuItem();
                ToolStripMenuItem   menutol5   =   new   ToolStripMenuItem();

             
                for   (int   i   =   0;   i   <=   arrary.GetUpperBound(0);   i++)
                {
                                                if   (arrary[i,   1]   ==   " "   ||   arrary[i,   1]   ==   null)
                        {   }
                        else
                        {
                                System.Windows.Forms.TreeNode   tn   =   new   System.Windows.Forms.TreeNode(arrary[i,   1]);
                                tn.Tag   =   arrary[i,   0];//菜單代碼   arrary[i,   1]名稱   arrary[i,   2]級別


                               
                                //menutola.Text   =   "JokevinHr ";
                                //menumain.Items.Add(menutola);

                                switch(arrary[i,2])
                                {
                                                                                                                                            case   "1 ":
                                                                                        menutol1   =   menutola;


                                                menumain.Items.Add(arrary[i,   1]);
                                             
                                                                                       
                                                break;
                                                 
                                        case   "2 ":
                                                trpa.Nodes.Add(tn);
                                                trpb   =   tn;
                                                trpb.Expand();
                                                //ToolStripMenuItem   menutol2   =   new   ToolStripMenuItem();
                                                //menutol2.Text   =   tn.Text;
                                                menutol1.DropDownItems.Add(arrary[i,   1]);                                  
                                               
                                                break;

                                        case   "3 ":
                                                menutol2.DropDownItems.Add(arrary[i,   1]);  
                                                break;

                                        case   "4 ":


                                                break;
                                        case   "5 ":
                                                break;

                                        case   "6 ":
                                              break;
                                        default:
                                              break;
                                }
                               
                        }

                }


[解决办法]
动态增加菜单的一个例子(不完全),但已可用,希望对你有帮助!

#Region "-------- 从 DB 中取得有关 Menu 的记录,并产生本功能的 Menu -------- "

' ' ' <summary>
' ' ' 检查是否有相关的Menu 设定,如有,则建立
' ' ' </summary>
' ' ' <remarks> </remarks>
Private Sub CreateMenu()
Dim dtMenu As DataTable
dtMenu = oECSGen.getDT_MenuItem(c_PorgramID)

If dtMenu.Rows.Count = 0 Then Exit Sub

Dim mnuForm As New MenuStrip
Dim dtMenuRoot As DataTable
Dim iMenuID As Integer

dtMenuRoot = oECSGen.getDT_MenuItem_byID(c_PorgramID, 0)
If dtMenuRoot.Rows.Count = 0 Then Exit Sub

' 增加第一级Menu
For i As Int16 = 0 To dtMenuRoot.Rows.Count - 1
Dim tsmItem As New ToolStripMenuItem(dtMenuRoot.Rows(i).Item( "Item_Text ").ToString)

' 增加其下的所有级别的 Menu Item
iMenuID = dtMenuRoot.Rows(i).Item( "Item_ID ")

createNestMenuItem(tsmItem, iMenuID)

mnuForm.Items.Add(tsmItem)
Next

mnuForm.Dock = DockStyle.Top

Me.MainMenuStrip = mnuForm
Me.Controls.Add(mnuForm)
End Sub

' ' ' <summary>
' ' ' 嵌套产生一个Top Level 菜单项下所有级别的菜单项
' ' ' </summary>
' ' ' <param name= "tsmParentItem "> 父菜单项 </param>
' ' ' <param name= "iParentID "> 父菜单ID </param>
' ' ' <remarks> </remarks>
Private Sub createNestMenuItem(ByVal tsmParentItem As ToolStripMenuItem, ByVal iParentID As Integer)
Dim dtMenuLevel As DataTable
Dim iMenuID As Integer

dtMenuLevel = oECSGen.getDT_MenuItem_byID(c_PorgramID, iParentID)


If dtMenuLevel.Rows.Count > 0 Then
For j As Int16 = 0 To dtMenuLevel.Rows.Count - 1
Dim tsmItemLevel As New ToolStripMenuItem(dtMenuLevel.Rows(j).Item( "Item_Text ").ToString, Nothing, New EventHandler(AddressOf OnMenuItem_Click), dtMenuLevel.Rows(j).Item( "Item_Name ").ToString)
tsmParentItem.DropDownItems.Add(tsmItemLevel)
iMenuID = Val(dtMenuLevel.Rows(j).Item( "Item_ID "))

createNestMenuItem(tsmItemLevel, iMenuID)
Next
End If
End Sub

' ' ' <summary>
' ' ' 处理对应 Menu Item 的单击事件,根据其对应的名称
' ' ' </summary>
' ' ' <remarks> 此处理过程必须要根据对应的Menu Item 写对应的处理事件 </remarks>
Private Sub OnMenuItem_Click(ByVal sender As Object, ByVal e As System.EventArgs)
Dim sItemName As String = CType(sender, ToolStripMenuItem).Name.Trim.ToLower

Select Case sItemName
Case "mnufile_save " ' Menu : File
Toolbar_Click( "Save ")
Case "mnufile_cancel "
Toolbar_Click( "Undo ")
Case "mnufile_exit "
Toolbar_Click( "Exit ")

Case "mnuedit_copy " ' Menu : Edit

Case "mnuedit_paste "

Case "mnurecord_add " ' Menu : Record
Toolbar_Click( "Add ")
Case "mnurecord_edit "
Toolbar_Click( "Edit ")
Case "mnurecord_delete "
Toolbar_Click( "Delete ")
Case "mnurecord_copy "
Toolbar_Click( "Copy ")

Case "mnuOther " ' Menu : Other
Case " "

Case " " ' Menu : Window

Case " " ' Menu : Help
Case Else

End Select

End Sub
#End Region
[解决办法]
mark

热点排行