C#实现多个子窗体切换效果

简介: C#实现多个子窗体切换效果

 

C#的在主窗体中实现多个子窗体相互切换的效果主要依托于panel容器和Controls函数。

Hello,大家好!我是灰小猿!

今天来和大家分享一下在C#的winform开发中如何实现借助一个主窗体来实现内部多个子窗体的切换效果。

首先来看一下主窗体中多个小窗体切换的效果:

image.gif编辑

多窗体切换的原理:多窗体切换的原理其实是借助一个panel容器,在该容器中显示相同大小的窗口,

接下来大灰狼和大家分享一下建立多窗口切换的步骤:

1、新建一个主窗体并在其中放置适当的控件,包括进行切换的按钮和显示窗体的panel容器,在这里要注意:将要显示的子窗体就是在该panel容器中显示的,

效果如下:

image.gif编辑

2、新建用于在主窗体中显示的子窗体,子窗体的新建其实是一个用户控件(Windows窗体),在这里我们可以在状态栏中右击选择—>添加—>用户控件(Windows窗体)

image.gif编辑

3、设置子窗体的尺寸和panel容器的尺寸相等,目的是为了在panel容器中显示时不会溢出。在这里我们为了便于区分三个不同的子窗体,设置窗体的不同颜色,并在窗体中进行提示。

image.gif编辑

4、以同样的方式建立子窗体二和子窗体三,

image.gif编辑

窗体三

image.gif编辑

5、在主窗体的代码中定义相应的三个窗口变量,

public UserControl1 f1; //创建用户控件一变量
        public UserControl2 f2; //创建用户控件二变量
        public UserControl3 f3; //创建用户控件三变量

image.gif

6、在Form1_Load函数中对三个变量进行赋值,也就是对三个对象进行实例化

private void Form1_Load(object sender, EventArgs e)
        {
            f1 = new UserControl1();    //实例化f1
            f2 = new UserControl2();    //实例化f2
            f3 = new UserControl3();    //实例化f3
        }

image.gif

7、由于我们的窗体切换是点击相应的按钮触发的,所以我们要为相应的按钮控件设置触发事件。双击主窗体中的按钮进入相应的触发函数,在这里我们要使用如下的代码对相应的子窗体进行显示:

//显示窗体一
        private void button1_Click(object sender, EventArgs e)
        {
            f1.Show();   //将窗体一进行显示
            panel2.Controls.Clear();    //清空原容器上的控件
            panel2.Controls.Add(f1);    //将窗体一加入容器panel2
        }
        //显示窗体二
        private void button2_Click(object sender, EventArgs e)
        {
            f2.Show();   //将窗体二进行显示
            panel2.Controls.Clear();    //清空原容器上的控件
            panel2.Controls.Add(f2);    //将窗体二加入容器panel2
        }
        //显示窗体三
        private void button3_Click(object sender, EventArgs e)
        {
            f3.Show();   //将窗体三进行显示
            panel2.Controls.Clear();    //清空原容器上的控件
            panel2.Controls.Add(f3);    //将窗体三加入容器panel2
        }

image.gif

8、完成之后运行窗口,点击相应的按钮,在panel2容器中就可以呈现出相应的界面。

image.gif编辑

最后附上完整源码

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 window_cut
{
    public partial class Form1 : Form
    {
        public UserControl1 f1; //创建用户控件一变量
        public UserControl2 f2; //创建用户控件二变量
        public UserControl3 f3; //创建用户控件三变量
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            f1 = new UserControl1();    //实例化f1
            f2 = new UserControl2();    //实例化f2
            f3 = new UserControl3();    //实例化f3
        }
        //显示窗体一
        private void button1_Click(object sender, EventArgs e)
        {
            f1.Show();   //将窗体一进行显示
            panel2.Controls.Clear();    //清空原容器上的控件
            panel2.Controls.Add(f1);    //将窗体一加入容器panel2
        }
        //显示窗体二
        private void button2_Click(object sender, EventArgs e)
        {
            f2.Show();   //将窗体二进行显示
            panel2.Controls.Clear();    //清空原容器上的控件
            panel2.Controls.Add(f2);    //将窗体二加入容器panel2
        }
        //显示窗体三
        private void button3_Click(object sender, EventArgs e)
        {
            f3.Show();   //将窗体三进行显示
            panel2.Controls.Clear();    //清空原容器上的控件
            panel2.Controls.Add(f3);    //将窗体三加入容器panel2
        }
    }
}

image.gif

觉得不错记得点赞关注哟!

大灰狼陪你一起进步!

image.gif编辑

目录
相关文章
|
6月前
|
Java 数据库 C#
C#winforms实现windows窗体人脸识别
C#winforms实现windows窗体人脸识别
|
关系型数据库 MySQL C#
C# winform 一个窗体需要调用自定义用户控件的控件名称
给用户控件ucQRCode增加属性: //二维码图片 private PictureBox _pictureBoxFSHLQrCode; public PictureBox PictureBoxFSHLQrCode {   get { return _pictureBoxFSHLQrCode; }   set { this.pictureBoxFSHLQrCode = value; } } 在Form1窗体直接调用即可: ucQRCode uQRCode=new ucQRCode(); ucQRCode.PictureBoxFSHLQrCode.属性= 要复制或传给用户控件上的控件的值
71 0
|
1月前
|
API C# Windows
【C#】在winform中如何实现嵌入第三方软件窗体
【C#】在winform中如何实现嵌入第三方软件窗体
97 0
|
4月前
|
开发框架 数据可视化 C#
|
6月前
|
C#
C#如何实现窗体最小化到托盘
C#如何实现窗体最小化到托盘
79 0
|
6月前
|
JavaScript Linux C#
【傻瓜级JS-DLL-WINCC-PLC交互】1.C#用windows窗体控件创建.net控件
【傻瓜级JS-DLL-WINCC-PLC交互】1.C#用windows窗体控件创建.net控件
143 0
|
6月前
|
C# Windows
C#安装“Windows 窗体应用(.NET Framework)”
C#安装“Windows 窗体应用(.NET Framework)”
192 0
|
11月前
|
C# 数据安全/隐私保护
C# 窗体之间参数互相传递的两种方法与使用
C# 窗体之间参数互相传递的两种方法与使用
|
11月前
|
C# Kotlin
C#is、as关键字及获取当前活动窗体的实例
这篇日志记录一下C#中is关键字及as关键字的用法。 Is :判断检查对象是否与给定类型兼容 As :将对象转换为指定类型(强转),就跟(int )这样的用法是一样的。 获取当前窗体的活动子窗体。
56 0
|
C# 数据安全/隐私保护
ApeForms | C# WinForm窗体控件平滑减速运动
在桌面软件开发中,有时会需要控制窗体或控件移动以实现某些界面效果,比如幻灯片换页、侧面的展开栏等。 通常情况下我们会使用Timer以每隔一段时间修改一下坐标位置的方式来实现目标对象的位移效果,但通过这个方式实现的动效存在几个问题: 匀速运动效果生硬; 运动过程中不便灵活改变运动状态(如侧栏展开一半时令其收起); 动效多时需要创建多个Timer对象,不易管理且占用资源; ApeForms中为控件和窗体提供了平滑运动的扩展方法,很好的解决了这些问题。不仅是坐标的平滑运动,还有控件\窗体尺寸的平滑变化、透明度的平滑变化。允许在变化的中途随时更改目标坐标\尺寸\透明度,且使用共享的Timer
11393 1
ApeForms | C# WinForm窗体控件平滑减速运动