我用的编译器是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://pan.baidu.com/s/1d27-pBRPPif5ByRelTGp2A?pwd=1234
提取码: 1234