关于winform窗口运用程序实现treeview和tabControl的动态显示

关于winform窗口运用程序实现treeview和tabControl的动态显示


这个示例中菜单使用控件treeview,数据是动态加载的。右边的标签页用的tabControl,通过改变tabpag实现切换效果。
之前网上找了很多方法,由于我的form是动态加载的。一直没法获取,最后在窗口中先初始化。再把form对象放到对象集合再遍历集合,通过form的name属性和treeview的text属性进行对比动态展示标签页。

先做一个菜单列表:
ps:我用的是splitContainer控件做的布局
下面展示一些 内联代码片

在这里插入图片描述

//将form子窗口加载到对象集合
在这里插入图片描述
private UserInfo users;
private Fxglinter fxgl;
private ybfx ybfx;
private htgl htgl;
private ywcl ywcl;
private zhcx zhcx;
private int num;
List<Object> tblis;
public FXGL_Main(UserInfo user)
{
   ybfx = new ybfx();
   htgl = new htgl();
   ywcl = new ywcl();
   zhcx = new zhcx();
   fxgl = new Fxglinter();
   tblis = new List<Object>();
   tblis.Add(ybfx);
   tblis.Add(htgl);
   tblis.Add(ywcl);
   tblis.Add(zhcx);
   tblis.Add(fxgl);
 }
          
//窗口加载的时候动态加载菜单
private void FXGL_Main_Load(object sender, EventArgs e)
{
    this.treeView1.BeginUpdate();
    this.treeView1.Nodes.Clear();
    //读取数据动态加载菜单,for循环递归子菜单
    List<string> lists=fxgl.getMenu();
    for (int i = 0; i < lists.Count(); i++)
    {
        TreeNode topNode = new TreeNode(lists[i], 0, 0);
        this.treeView1.Nodes.Add(topNode);
        List<string> mune_childen = fxgl.getMenu_Children(lists[i]);
        foreach (string menu in mune_childen)
        {
            TreeNode subNode = new TreeNode(menu, 1, 1);
            subNode.Tag = menu;
            topNode.Nodes.Add(subNode);
        }
    }
    //treeView1.Nodes[0].Expand();
    //this.treeView1.ExpandAll();
    this.treeView1.EndUpdate();
    Up_TreeViewImg();
}


 //初始化&修改菜单样式
private void Up_TreeViewImg()
{
   //节点选中/和未选中的图片,图片放到了程序根目录下
   string path1 = Application.StartupPath + "\\imager\\file.png";
   string path2 = Application.StartupPath + "\\imager\\fileopen.png";
   ImageList myImageList = new ImageList();
   myImageList.Images.Add(Image.FromFile(path1));
   myImageList.Images.Add(Image.FromFile(path2));
   treeView1.ImageList = myImageList;
   int num = treeView1.Nodes.Count;
   for (int i = 0; i < treeView1.Nodes.Count;i++ )
   {
       treeView1.Nodes[i].ImageIndex = 0;
       treeView1.Nodes[i].SelectedImageIndex = 1;
       for (int j = 0; j < treeView1.Nodes.Count; j++)
       {
           treeView1.Nodes[i].Nodes[j].ImageIndex = 0;
           treeView1.Nodes[i].Nodes[j].SelectedImageIndex = 1;
       }
       
   }
}

当菜单被选中之后的事件:

/*
         * 菜单被选择后加载事件
         * */
        private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
        {
            Up_TreeViewImg();
            string tvname= e.Node.Text;
            //获取菜单的类型,菜单在数据库如:合同管理 对应menu_py :htgl
            List<string> showlis = fxgl.getMenu_PY(e.Node.Text);
            List<string> lis = new List<string>();
            for (int i = 0; i < tabControl1.TabCount; i++)
            {
                string tbname = tabControl1.TabPages[i].Text;
                lis.Add(tbname);  
            }
            //判断是否存在标签,不存在就创建
            if (lis.IndexOf(tvname, 0, lis.Count) < 0)
            {
                TabPage tabpage = new System.Windows.Forms.TabPage();
                tabpage.Name = tvname;
                tabpage.AutoScroll = true;
                tabpage.Text = tvname;
                //判断选中的菜单是否存在form 存在打开对应标签页
                foreach (string mune in showlis)
                {   
                    for (int i = 0; i < tblis.Count;i++ )
                    {
                        //截取对象数据名称如:htgl
                        int begnum =tblis[i].GetType().ToString().Length-4;
                        string menustype = tblis[i].GetType().ToString().Substring(begnum, 4);
                        if (menustype == mune)
                        {
                            //初始化一个form,根据菜单来示例form对象
                            Form form = (Form)tblis[i];
                            form.FormBorderStyle = FormBorderStyle.None;
                            form.Dock = DockStyle.Fill;
                            form.TopLevel = false;
                            form.Show();
                            form.Parent = tabpage;
                            tabpage.Controls.Add(form);
                        }
                    }
                    
                }
                this.tabControl1.Controls.Add(tabpage);
                this.tabControl1.SelectedTab = tabpage;
                num = num + 1;
            }
            //根据选择打开标签页
            TabPage tp = (TabPage)tabControl1.Controls.Find(e.Node.Text, false)[0];
            this.tabControl1.SelectedTab = tp;
        }

窗口完整的代码示例

using ManagerStar.DBCONE;
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;

namespace ManagerStar
{
    public partial class FXGL_Main : Form
    {
        private UserInfo users;
        private Fxglinter fxgl;
        private ybfx ybfx;
        private htgl htgl;
        private ywcl ywcl;
        private zhcx zhcx;
        private int num;
        List<Object> tblis;
        public FXGL_Main(UserInfo user)
        {
            ybfx = new ybfx();
            htgl = new htgl();
            ywcl = new ywcl();
            zhcx = new zhcx();
            fxgl = new Fxglinter();
            tblis = new List<Object>();
            tblis.Add(ybfx);
            tblis.Add(htgl);
            tblis.Add(ywcl);
            tblis.Add(zhcx);
            tblis.Add(fxgl);
            InitializeComponent();
            users = user;
        }

        private void splitContainer1_Panel2_Paint(object sender, PaintEventArgs e)
        {

        }

        private void splitContainer1_Panel1_Paint(object sender, PaintEventArgs e)
        {

        }

        private void FXGL_Main_Load(object sender, EventArgs e)
        {
            
            //string path = Application.StartupPath + "\\imager\\heard.jpg";
            string path = users.gethHear_url();
            label1.Text = "您好" + users.getUs_name() + ":" + users.getUsername();
            label2.Text = "上次登录:" + users.getLogin_time();
           // Image image = new Bitmap(path);
            //pictureBox1.BackgroundImage = image;
           // pictureBox1.BackgroundImageLayout = ImageLayout.Stretch;

            this.treeView1.BeginUpdate();
            this.treeView1.Nodes.Clear();
            //读取数据动态加载菜单
            List<string> lists=fxgl.getMenu();
            for (int i = 0; i < lists.Count(); i++)
            {
                TreeNode topNode = new TreeNode(lists[i], 0, 0);
                this.treeView1.Nodes.Add(topNode);
                List<string> mune_childen = fxgl.getMenu_Children(lists[i]);
                foreach (string menu in mune_childen)
                {
                    TreeNode subNode = new TreeNode(menu, 1, 1);
                    subNode.Tag = menu;
                    topNode.Nodes.Add(subNode);
                }
            }
            //treeView1.Nodes[0].Expand();
            //this.treeView1.ExpandAll();
            this.treeView1.EndUpdate();
            Up_TreeViewImg();
        }

        //初始化&修改菜单样式
        private void Up_TreeViewImg()
        {
            //节点选中/和未选中的图片,图片放到了程序根目录下
            string path1 = Application.StartupPath + "\\imager\\file.png";
            string path2 = Application.StartupPath + "\\imager\\fileopen.png";
            ImageList myImageList = new ImageList();
            myImageList.Images.Add(Image.FromFile(path1));
            myImageList.Images.Add(Image.FromFile(path2));
            treeView1.ImageList = myImageList;
            int num = treeView1.Nodes.Count;
            for (int i = 0; i < treeView1.Nodes.Count;i++ )
            {
                treeView1.Nodes[i].ImageIndex = 0;
                treeView1.Nodes[i].SelectedImageIndex = 1;
                for (int j = 0; j < treeView1.Nodes.Count; j++)
                {
                    treeView1.Nodes[i].Nodes[j].ImageIndex = 0;
                    treeView1.Nodes[i].Nodes[j].SelectedImageIndex = 1;
                }
                
            }
        }

        /*
         * 菜单被选择后加载事件
         * */
        private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
        {
            Up_TreeViewImg();
            string tvname= e.Node.Text;
            //获取菜单的类型,菜单在数据库如:合同管理 对应menu_py :htgl
            List<string> showlis = fxgl.getMenu_PY(e.Node.Text);
            List<string> lis = new List<string>();
            for (int i = 0; i < tabControl1.TabCount; i++)
            {
                string tbname = tabControl1.TabPages[i].Text;
                lis.Add(tbname);  
            }
            //判断是否存在标签,不存在就创建
            if (lis.IndexOf(tvname, 0, lis.Count) < 0)
            {
                TabPage tabpage = new System.Windows.Forms.TabPage();
                tabpage.Name = tvname;
                tabpage.AutoScroll = true;
                tabpage.Text = tvname;
                //判断选中的菜单是否存在form 存在打开对应标签页
                foreach (string mune in showlis)
                {   
                    for (int i = 0; i < tblis.Count;i++ )
                    {
                        //截取对象数据名称如:htgl
                        int begnum =tblis[i].GetType().ToString().Length-4;
                        string menustype = tblis[i].GetType().ToString().Substring(begnum, 4);
                        if (menustype == mune)
                        {
                            //初始化一个form,根据菜单来示例form对象
                            Form form = (Form)tblis[i];
                            form.FormBorderStyle = FormBorderStyle.None;
                            form.Dock = DockStyle.Fill;
                            form.TopLevel = false;
                            form.Show();
                            form.Parent = tabpage;
                            tabpage.Controls.Add(form);
                        }
                    }
                    
                }
                this.tabControl1.Controls.Add(tabpage);
                this.tabControl1.SelectedTab = tabpage;
                num = num + 1;
            }
            //根据选择打开标签页
            TabPage tp = (TabPage)tabControl1.Controls.Find(e.Node.Text, false)[0];
            this.tabControl1.SelectedTab = tp;
        }
    }
}
  • 0
    点赞
  • 1
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不介意

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值