private void SetMenu()
        {
            MenuHandler menuHandler = new MenuHandler();
            MenuEntity  menuEntity  = menuHandler.LoadMenu();

            //foreach (MenuEntity childEntity in menuEntity.Children)
            //{
            //    menuHandler.DisplayMenu(this,menuStrip.Items["toolsMenu"] as ToolStripMenuItem, childEntity);
            //}
        }
        public MenuEntity LoadMenu()
        {
            FileStream    connectionStream = new FileStream("MenuConfig.xml", FileMode.Open);
            XmlSerializer xmlSerializer    = new XmlSerializer(typeof(MenuEntity));
            MenuEntity    menu             = null;

            try
            {
                menu = (MenuEntity)xmlSerializer.Deserialize(connectionStream);
            }
            catch (Exception ex)
            {
                menu = new MenuEntity();
            }
            finally
            {
                connectionStream.Close();
            }

            return(menu);
        }
        public void DisplayMenu(Crownwood.Magic.Controls.TabControl tabControl, MenuCommand topItem, MenuEntity menu)
        {
            MenuCommand childItem = new MenuCommand(menu.Text);

            if (menu.Children.Count == 0)
            {
                childItem.Tag    = menu;
                childItem.Click += delegate(object sender, EventArgs e)
                {
                    MenuCommand menuItem   = sender as MenuCommand;
                    MenuEntity  menuEntity = menuItem.Tag as MenuEntity;

                    Assembly assembly;
                    Type     type;
                    object   obj;
                    string   dir = System.AppDomain.CurrentDomain.BaseDirectory;
                    //Create assembly
                    assembly = Assembly.LoadFile(dir + menuEntity.DllName);
                    //Get type
                    type = assembly.GetType(menuEntity.ClassName);
                    //Create instance
                    obj = assembly.CreateInstance(menuEntity.ClassName);
                    //Get method info
                    MethodInfo method = type.GetMethod(menuEntity.Method);
                    //Invoke method.
                    try
                    {
                        if (menu.TabContained)
                        {
                            Form subForm = method.Invoke(obj, new Form[] { new Form() }) as Form;
                            if (subForm != null)
                            {
                                if (tabControl.TabPages[menu.TabText] == null)
                                {
                                    tabControl.TabPages.Add(new Crownwood.Magic.Controls.TabPage(menu.TabText, subForm));
                                }
                                tabControl.TabPages[menu.TabText].Selected = true;
                            }
                        }
                        else
                        {
                            method.Invoke(obj, new Form[] { new Form() });
                        }
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
                };
            }
            topItem.MenuCommands.Add(childItem);

            foreach (MenuEntity nextMenu in menu.Children)
            {
                DisplayMenu(tabControl, childItem, nextMenu);
            }
        }