C#winform实现单页面自由切换窗口

news2024/12/28 5:50:48
一、介绍

这是效果图,由于视频压缩画质很差,看个效果就好。
在这里插入图片描述
左侧是打开界面的按钮,点击左侧按钮右侧打开不同窗口,点击右侧窗口中的按钮,也可以切换页面,可以方便的进行返回、下一页等操作。
每个窗口打开时其他窗口就会被释放,每次打开的新窗口都是新的实例,这一点可以自行根据需要进行设置,也可以不释放已打开的窗体,使它在后台保持运行状态。打开新窗体时如果不保留旧窗体的话,需要在关闭前把旧窗体的资源释放掉,例如定时器,线程什么的。

二、实现
  1. 首先创建项目,在主窗体中放置一个 SplitContainer 进行左右布局,左侧放按钮,右侧用于显示窗体。在这里插入图片描述
  2. 创建Size和上图中 Panel2 一样的子窗体,把 BorderStyle 设置为 none。
    在这里插入图片描述
  3. 在主窗体代码中声明子窗体对象
    在这里插入图片描述
  4. 在主窗体编写打开特定窗体的方法
    如下是打开 frmHome 子窗体的方法,打开其他子窗体的方法除了名字完全一样。
private void openHomePage()
{
    CloseOtherForms();//先关闭除主窗体以外的其他窗体,即关闭所有子窗体
    frmHome = new FrmHome();//实例化frmHome子窗体
    frmHome.Dock = System.Windows.Forms.DockStyle.Fill;//设置Dock为Fill使子窗体占满splitContainer1.Panel2
    frmHome.TopLevel = false;//设置为非顶级控件,否则无法添加
    frmHome.Show();//使窗体显示
    splitContainer1.Panel2.Controls.Clear();//清除splitContainer1.Panel2内容
    splitContainer1.Panel2.Controls.Add(frmHome);//将frmHome添加到splitContainer1.Panel2中
}

关闭除主窗体以外的其他窗体的方法:

private void CloseOtherForms()
{
    // 获取当前打开的所有窗体
    Form[] openForms = Application.OpenForms.Cast<Form>().ToArray();
    foreach (Form form in openForms)
    {
        // 关闭除主窗体以外的其他窗体
        if (form.Name != "FrmMain")
        {
            form.Close();
        }
        //MessageBox.Show(form.Name);
    }
}
  1. 在主窗体左侧点击按钮打开子窗体,直接在按钮的Click事件中调用方法打开就可以了。
private void btn_openHomePage_Click(object sender, EventArgs e)
{
    openHomePage();
}
  1. 在子窗体中点击按钮打开其他窗体。
    例如我要在气缸界面中点击拉拔一界面按钮,打开拉拔一界面,在拉拔一界面中点击返回,返回到气缸界面。
    在这里插入图片描述
    6.1. 已经在主窗体代码中编写打开各个窗体的代码(第四步),在主窗体代码中编写根据窗体名称打开窗体的方法。如下,非常简洁。
public void OpenWindow(string WindowName)
{
    //Form window;
    switch (WindowName)
    {
        case "FrmHome":
            openHomePage();
            break;
        case "FrmMenu":
            openMenuPage();
            break;
        case "FrmCylinders":
            openOperatingPage();
            break;
        case "FrmMachineInfo":
            openMachineInfoPage();
            break;
        case "气缸输出界面_拉拔一":
            Open气缸输出界面_拉拔一();
            break;
        // 添加更多的窗口名称和对应的窗口类
        default:
            // 如果指定的窗口名称无效,可以进行相应的处理
            return;
    }
}

6.2. 在子窗体中点击按钮时触发 OpenWindow 事件
下面的代码依旧很简单,在子窗体中获取主窗体,因为主窗体永远不会在子窗体关闭前关闭,所以直接用主窗体的名称获取就行了。

public partial class FrmCylinders : Form
{
    FrmMain frmMain;
    public FrmCylinders()
    {
        InitializeComponent();
        GetFrmMain();
    }
    private void GetFrmMain()
    {
        foreach (Form form in Application.OpenForms)
        {
            if (form.Name == "FrmMain")
            {
                frmMain = (FrmMain)form;
            }
        }
    }
    //调用打开其他窗体的方法
    private void btn_Strip1_Click(object sender, EventArgs e)
    {
        frmMain.OpenWindow("气缸输出界面_拉拔一");
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1314706.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

牛客后端开发面试题1

滴滴2022 1.redis过期策略 定时删除&#xff0c;定期删除&#xff0c;惰性删除 定时删除&#xff1a;设定一个过期时间&#xff0c;时间到了就把它删掉&#xff0c;对cpu不太友好&#xff0c;但是对内存友好 定期删除&#xff1a;每隔一个周期删除一次&#xff0c;对cpu和内存…

将 Github token 添加至远程仓库

将 Github token 添加至远程仓库后便于每次 push 重复输入的麻烦 首先,将已生成的 token 记录(注:生成后的 token 确认后便无法查看只能重新生成)并找到对应的项目 git 本地文件路径下 其次,将其与项目所关联,按如下格式配置即可 token 格式类似于 ghp_CAxxxxxxxxxxxxxxxxxGx5j…

MUR6060PT-ASEMI低功耗半导体二极管MUR6060PT

编辑&#xff1a;ll MUR6060PT-ASEMI低功耗半导体二极管MUR6060PT 型号&#xff1a;MUR6060PT 品牌&#xff1a;ASEMI 封装&#xff1a;TO-247 特性&#xff1a;插件、快恢复二极管 最大平均正向电流&#xff1a;60A 最大重复峰值反向电压&#xff1a;600V 恢复时间&am…

金蝶云星空表单插件获取复选框的值

文章目录 金蝶云星空表单插件获取复选框的值 金蝶云星空表单插件获取复选框的值 object getPur this.View.Model.GetValue("F_XHWT_IsPur", rowIndexV);bool isSerial !Convert.ToBoolean(itemClose["F_XHWT_IsPur"] "");取得值可以直接转换成…

Python 自动化之收发邮件(二)

发邮件之Windows进程监控 文章目录 发邮件之Windows进程监控前言一、基本内容二、基本结构三、库模块四、函数模块1.进程监控2.邮件发送 五、程序运行模块1.获取时间2.用户输入3.进程监控3.1进程启动发邮件3.2进程停止发邮件 总结 前言 上一篇简单写了一下如何进行邮件的收发操…

11.1.0iPortal之新增【增强其他服务注册能力】

作者&#xff1a;yx 文章目录 前言 一、使用场景二、功能说明三、举例说明 前言 11.1.0版本以前&#xff0c;注册服务的地址必须是可以访问的&#xff0c;否则会注册失败&#xff0c;如下图所示&#xff1a; 11.1.0版本开始新增“服务在线检测”功能&#xff0c;即可以实现注…

【Android】在Android上使用mlKit构建人脸检测程序

在Android上构建人脸检测程序 目录 1、导入mlKit依赖包2、配置人脸检测器并且获取人脸检测器3、加载图片资源4、调用人脸检测器5、绘制矩形边框6、完整代码7、效果展示 1、导入mlKit依赖包 dependencies {// ...// Use this dependency to bundle the model with your appi…

使用 TensorFlow 创建生产级机器学习模型(基于数据流编程的符号数学系统)——学习笔记

资源出处&#xff1a;初学者的 TensorFlow 2.0 教程 | TensorFlow Core (google.cn) 前言 对于新框架的学习&#xff0c;阅读官方文档是一种非常有效的方法。官方文档通常提供了关于框架的详细信息、使用方法和示例代码&#xff0c;可以帮助你快速了解和掌握框架的使用。 如…

关于嵌入式开发的一些信息汇总:C标准、芯片架构、编译器、MISRA-C

关于嵌入式开发的一些信息汇总&#xff1a;C标准、芯片架构、编译器、MISRA-C 关于C标准芯片架构是什么&#xff1f;架构对芯片有什么作用&#xff1f;arm架构X86架构mips架构小结 编译器LLVM是什么&#xff1f;前端在干什么&#xff1f;后端在干什么&#xff1f; MISRA C的诞生…

使用国内镜像源安装opencv

在控制台输入命令&#xff1a; pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple 验证安装&#xff1a; step 1&#xff1a; 打开终端&#xff1b;step 2&#xff1a; 输入python&#xff0c;进入Python编译环境&#xff1b;step 3&#xff1a; 粘贴…

基于若依搭建微服务nacos版本(ruoyi-Cloud前后端分离)

说明&#xff1a;本文介绍基于Ruoyi-Cloud前后端分离nacos版本的微服务从0到1的搭建过程&#xff0c;同时新增一个新的微服务模块。是基于官方文档的补充说明&#xff0c;需要结合Ruoyi-Cloud的官方文档 https://doc.ruoyi.vip/ruoyi-cloud/ 如果直接查看官方文档便可成功部署&…

LeetCode刷题--- 全排列

个人主页&#xff1a;元清加油_【C】,【C语言】,【数据结构与算法】-CSDN博客 个人专栏 力扣递归算法题 【 http://t.csdnimg.cn/yUl2I 】 【C】 【 http://t.csdnimg.cn/6AbpV 】 数据结构与算法 【 http://t.csdnimg.cn/hKh2l 】 前言&…

hadoop3.3.4安装及启动

1.虚拟机的安装 此处我选择的是VMware,激活码可以百度搜索&#xff0c;安装过程比较缓慢&#xff0c;需要耐心等待 --------------------------------------------------------------------------------------------------------------------------------- 2.创建新的虚拟机…

虚幻学习笔记17—C++委托(单播)

一、前言 相比“代理”这个名词我更喜欢叫“委托”&#xff0c;虚幻的委托分为三类&#xff0c;分别为单播、多播和动态多播。单播顾名思义就是一次只能绑定一个函数的委托&#xff0c;多播能一次性绑定多个&#xff0c;动态多播即可以在蓝图中进行动态的绑定且可以绑定多个。 …

YOLOv8改进 | Conv篇 | 轻量级下采样方法ContextGuided(涨点幅度)

一、本文介绍 本文给大家带来的是改进机制是一种替换Conv的模块Context Guided Block (CG block) &#xff0c;其是在CGNet论文中提出的一种模块&#xff0c;其基本原理是模拟人类视觉系统依赖上下文信息来理解场景。CG block 用于捕获局部特征、周围上下文和全局上下文&#…

Leetcode—2413.最小偶倍数【简单】

2023每日刷题&#xff08;六十&#xff09; Leetcode—2413.最小偶倍数 class Solution { public:int smallestEvenMultiple(int n) {return (n % 2 1) * n;} };运行结果 之后我会持续更新&#xff0c;如果喜欢我的文章&#xff0c;请记得一键三连哦&#xff0c;点赞关注收藏…

新手HTML和CSS的常见知识点

​​​​ 目录 1.HTML标题标签&#xff08;到&#xff09;用于定义网页中的标题&#xff0c;并按照重要性递减排列。例如&#xff1a; 2.HTML段落标签&#xff08;&#xff09;用于定义网页中的段落。例如&#xff1a; 3.HTML链接标签&#xff08;&#xff09;用于创建链接…

小区生活污水处理需要哪些设备和工艺

在小区生活中&#xff0c;污水处理是一个非常重要的环节&#xff0c;它关乎到环境的保护和居民的生活质量。因此&#xff0c;了解小区生活污水处理所需要的设备和工艺是至关重要的。 首先&#xff0c;在小区生活污水处理中&#xff0c;需要用到的设备包括污水收集系统、初级沉淀…

详解RTC:以华人文化打造链上生态

文化是人类在发展的历史长河中淘洗出来的智慧结晶&#xff0c;随着人类社会的进步和变迁&#xff0c;经历了从口口相传到互联网等不同历史时代的传承和创新。在数字技术飞速发展的当今&#xff0c;区块链技术为文化的创新与传承提供了全新的空间和方式&#xff0c;使其得以在新…

【CANN训练营】CANN算子开发进阶笔记

Ascend C Tilling计算 Tilling基本概念介绍 大多数情况下&#xff0c;Local Memory的存储&#xff0c;无法完全容纳算子的输入与输出的所有数据&#xff0c;需要每次搬运一部分输入数柜进行计算然后搬出&#xff0c;再敲运下一部分输入数据进行计算&#xff0c;直到得到完愁的…