利用NavMenu组件与TabControl添加页面

利用NavMenu组件与TabControl添加页面

using Sunny.UI;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Sunny;
using DianwoManage.Bussiness;

namespace DianwoManage
{
    public partial class Main : UIForm
    {
        public Main()
        {
            InitializeComponent();
            InitMain();
        }
        public void InitMain()
        {
            int pageIndex = 100;
            TreeNode parent = Menu.CreateNode("一项",pageIndex);
            Menu.CreateChildNode(parent,"条目1",++pageIndex);
            Menu.CreateChildNode(parent, "条目2", ++pageIndex);
            pageIndex = 200;
            parent = Menu.CreateNode("二项", pageIndex);
            Menu.CreateChildNode(parent, "条目3", ++pageIndex);
            Menu.CreateChildNode(parent, "条目4", ++pageIndex);
        }
        int[] index = { 0,0,0,0,0,0,0,0,0,0}; 
        private void Menu_MenuItemClick(TreeNode node, NavMenuItem item, int pageIndex)
        {
            if(!index.Contains(0))
            {
                MessageBox.Show("最多只能打开10个页面!");
            }
            int indexnum = -1;
            if (IsExit(pageIndex,ref indexnum))
            {
                Tab.SelectedIndex=indexnum;
                return;
            }
            switch (pageIndex)
            {
                case 101:
                    //Tab.AddPage(new 你好());
                    break;
                case 102:
                    Tab.AddPage(new Form2());
                    break;
                case 201:
                    Tab.AddPage(new Form3());
                    break;
                case 202:
                    Tab.AddPage(new Form4());
                    break;
            }
            Tab.SelectedIndex = indexnum;
        }

        public bool IsExit(int pageindex,ref int num)
        {
            if (index.Contains(pageindex))
            {
                for (int i = 0; i < 10; i++)
                {
                    if (index[i] == pageindex)
                    {
                        num = i;
                        return true;                    }
                }
            }  
            for(int i=0;i<10; i++)
            {
                if(index[i]==0)
                {
                    num = i;
                    index[i] = pageindex;
                    break;
                }
            }
            return false;
        }
        private bool uiTabControl1_BeforeRemoveTabPage(object sender, int ind)
        {
            index[ind]= 0;
            for (int i = 0; i < 10; i++)
            {
                if (index[i] == 0&&i<9)
                {
                    int temp = index[i];
                    index[i] = index[i+1];
                    index[i + 1] = temp;
                }
            }
            return true;
        }
    }
}

效果图
在这里插入图片描述
功能:当点击左侧选项卡其中一条,右侧视图会将该选项卡设置为展示页面,会判断是否重复选择,不显示重复页面,该图,我将增加页面都设为了form2,因此都显示的form2的内容。

第二种方法

NavMenuItem样式:

        public NavMenuItem(string text, int pageIndex,string tag)
        {
            PageIndex = pageIndex;
            Text = text;
            Tag = tag;
        }
public Main()
        {
            InitializeComponent();
            InitMain();
        }
        public void InitMain()
        {
            int pageIndex = 100;
            int pageIndex = 100;
            TreeNode parent = Menu.CreateNode("一项",pageIndex,"dpxx");
            Menu.CreateChildNode(parent,"条目1",++pageIndex,"sjxx");
            Menu.CreateChildNode(parent, "条目2", ++pageIndex,"wdxx");
            pageIndex = 200;
            parent = Menu.CreateNode("二项", pageIndex);
            Menu.CreateChildNode(parent, "条目3", ++pageIndex);
            Menu.CreateChildNode(parent, "条目4", ++pageIndex);
            Menu.SelectFirst();       
        }
        private void Menu_MenuItemClick(TreeNode node, NavMenuItem item, int pageIndex)
        {
            if (item != null&&item.Tag!=null)
            {
                string menuText = item.Text;
                foreach (TabPage tab in Tab.TabPages)
                {
                    if (tab.Text == menuText)
                    {
                        Tab.SelectedTab = tab;
                        return;
                    }
                }
                string assemblyPath = AppDomain.CurrentDomain.BaseDirectory + "DianwoManage.exe"; //得到动态库文件名
                if (!File.Exists(assemblyPath))
                {
                    MessageBox.Show("未找到文件:");
                    return;
                }
                Type type = null;
                Assembly asm = Assembly.LoadFrom(assemblyPath);
                Type[] t = asm.GetTypes();
                foreach (Type ty in t)
                {
                    if (ty.Name == item.Tag.ToString())
                    {
                        type = ty;
                    }
                }
                if (type == null)
                {
                    MessageBox.Show("未找到模块:");
                    return;
                }
                LoadMdiForm(Tab, menuText, type);
            }

        }
        private Form LoadMdiForm(TabControl MainTabControl, string menuText, Type formType)
        {
            Form frm = (Form)Activator.CreateInstance(formType);
            frm.Text = menuText;
            frm.TopLevel = false;

            TabPage sTabPag = new TabPage(menuText);

            sTabPag.Font = new Font("微软雅黑", 9F);
            sTabPag.Controls.Add(frm);
            MainTabControl.Controls.Add(sTabPag);
            MainTabControl.SelectedTab = sTabPag;
            frm.Show();
            return frm;
        }
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值