C#WinForm开发在选项卡tab中集成加载多个窗体,通过选项卡切换窗体(超详细讲解)

我用的编译器是VS2017,大家按照步骤一步一步来,应该是可以实现选项卡切换窗体的。
1.新建C#窗体应用,我建的项目名称是TabControlDemo,建议新手也用这个名称,否则后面赋值代码的时候可能会出错

在这里插入图片描述

2.新建三个窗体,为了省事,直接用默认名称,Form2,Form3,Form4.
在这里插入图片描述

在这里插入图片描述

3.为了便于观察效果,在刚才新建的三个窗体上添加label标签,并标明窗体的名称
在这里插入图片描述

4.选取Form1作为主窗体,在Form1中添加控件TabControl,并调整大小和位置。
点击刚添加上的TabControl控件,右上角会出现一个三角,点击此三角,添加选项卡

在这里插入图片描述

5.修改三个tabPage的text属性
在这里插入图片描述

修改三个TabPage的tag属性,TabPage1的tag属性修改为TabControlDemo.Form2,其余两个TabPage依次类推。

在这里插入图片描述
6.给tabControl1添加事件SelectedIndexChanged,双击右侧空白处即可添加。

在这里插入图片描述
双击Form1窗体,生成Form1的构造函数

 private void Form1_Load(object sender, EventArgs e)
        {

        }

7.在刚才生成的tabControl1_SelectedIndexChanged函数中添加如下代码

private void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (s[tabControl1.SelectedIndex] == 0)
            {
                btnX_Click(sender, e);
            }
        }

在Form1_Load中添加如下代码

private void Form1_Load(object sender, EventArgs e)
        {
            string formClass = "TabControlDemo.Form2";
            GenerateForm(formClass, tabControl1);
        }

最后,给出整个Form1窗体的代码

using System;
using System.Reflection;
using System.Windows.Forms;

namespace TabControlDemo
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        public int[] s = { 0, 0, 0 };//用来记录窗体是否打开过
        private void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
        {
           
            
                if (s[tabControl1.SelectedIndex] == 0)
                {
                    btnX_Click(sender, e);
                }
            
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            string formClass = "TabControlDemo.Form2";
            GenerateForm(formClass, tabControl1);
        }
        public void GenerateForm(string form, object sender)
        {
            //反射生成窗体
            Form fm = (Form)Assembly.GetExecutingAssembly().CreateInstance(form);
            //设置窗体没有边框,加入到选项卡中
            fm.FormBorderStyle = FormBorderStyle.None;
            fm.TopLevel = false;
            fm.Parent = ((TabControl)sender).SelectedTab;
            fm.ControlBox = false;
            fm.Dock = DockStyle.Fill;
            fm.Show();
            s[((TabControl)sender).SelectedIndex] = 1;
        }

        private void btnX_Click(object sender, EventArgs e)
        {
            string formClass = ((TabControl)sender).SelectedTab.Tag.ToString();

            GenerateForm(formClass, sender);

        }
    }
}

运行效果:
刚启动程序时
在这里插入图片描述
点击form3
在这里插入图片描述

点击form4
在这里插入图片描述
注意事项:
1.不要忘了添加using引用
2.如果引发下面这种异常,请检查每个tabPage的tag属性是否正确
在这里插入图片描述

3.如果对你有帮助,可以给我捐点下载积分,如果按照本文没有实现功能,也可以来捐点积分
https://download.csdn.net/download/weixin_43074474/11632460

  • 14
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值