C#子窗体嵌入主窗体

news2024/9/24 15:26:00

上位机开发中,经常会需要将子窗体嵌入到主窗体。

运行结果

核心实现:

        private void button2_Click(object sender, EventArgs e)
        {
            Form3 childForm = new Form3();
            //判断容器中是否已经打开子窗体,如果打开现将其关闭
            foreach (Control item in this.splitContainer1.Panel2.Controls)
            {
                if (item is Form)
                {
                    ((Form)item).Close();
                    Console.WriteLine("找到以前的窗体并关闭");
                }
            }
            childForm.TopLevel = false;//将子窗体设置成非顶级控件
            childForm.FormBorderStyle = FormBorderStyle.None;//如果是带边框的窗体,需要去掉窗体边框;
            childForm.Parent = this.splitContainer1.Panel2;
            childForm.Dock = DockStyle.Fill;//设置随着容器的大小自动调整窗体大小;
            childForm.Show();
        }

代码提炼优化为通用方法

public void OpenForm(Form childForm)//按钮事件调用通用方法
{
    if (childForm == null)
    {
        return;
    }

    //Form2 childForm = new Form2();
    //判断容器中是否已经打开子窗体,如果打开现将其关闭
    foreach (Control item in this.splitContainer1.Panel2.Controls)
    {
        if (item is Form)
        {
            ((Form)item).Close();
            Console.WriteLine("找到以前的窗体并关闭");
        }
    }
    childForm.TopLevel = false;//将子窗体设置成非顶级控件
    childForm.FormBorderStyle = FormBorderStyle.None;//如果是带边框的窗体,需要去掉窗体边框;
    childForm.Parent = this.splitContainer1.Panel2;
    childForm.Dock = DockStyle.Fill;//设置随着容器的大小自动调整窗体大小;
    childForm.Show();
}

调用方法

private void button3_Click(object sender, EventArgs e)
{
    OpenForm(new Form2());
}

 完整

代码如下:

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 WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {

        }
        private void button1_Click(object sender, EventArgs e)
        {
            Form2 childForm = new Form2();
            //判断容器中是否已经打开子窗体,如果打开现将其关闭
            foreach (Control item in this.splitContainer1.Panel2.Controls)
            {
                if (item is Form)
                {
                    ((Form)item).Close();
                    Console.WriteLine("找到以前的窗体并关闭");
                }
            }
            childForm.TopLevel = false;//将子窗体设置成非顶级控件
            childForm.FormBorderStyle = FormBorderStyle.None;//如果是带边框的窗体,需要去掉窗体边框;
            childForm.Parent = this.splitContainer1.Panel2;
            childForm.Dock = DockStyle.Fill;//设置随着容器的大小自动调整窗体大小;
            childForm.Show();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            Form3 childForm = new Form3();
            //判断容器中是否已经打开子窗体,如果打开现将其关闭
            foreach (Control item in this.splitContainer1.Panel2.Controls)
            {
                if (item is Form)
                {
                    ((Form)item).Close();
                    Console.WriteLine("找到以前的窗体并关闭");
                }
            }
            childForm.TopLevel = false;//将子窗体设置成非顶级控件
            childForm.FormBorderStyle = FormBorderStyle.None;//如果是带边框的窗体,需要去掉窗体边框;
            childForm.Parent = this.splitContainer1.Panel2;
            childForm.Dock = DockStyle.Fill;//设置随着容器的大小自动调整窗体大小;
            childForm.Show();
        }

        
        public void OpenForm(Form childForm)//按钮事件调用通用方法
        {
            if (childForm == null)
            {
                return;
            }

            //Form2 childForm = new Form2();
            //判断容器中是否已经打开子窗体,如果打开现将其关闭
            foreach (Control item in this.splitContainer1.Panel2.Controls)
            {
                if (item is Form)
                {
                    ((Form)item).Close();
                    Console.WriteLine("找到以前的窗体并关闭");
                }
            }
            childForm.TopLevel = false;//将子窗体设置成非顶级控件
            childForm.FormBorderStyle = FormBorderStyle.None;//如果是带边框的窗体,需要去掉窗体边框;
            childForm.Parent = this.splitContainer1.Panel2;
            childForm.Dock = DockStyle.Fill;//设置随着容器的大小自动调整窗体大小;
            childForm.Show();
        }

        private void button3_Click(object sender, EventArgs e)
        {
            OpenForm(new Form2());
        }

        private void button4_Click(object sender, EventArgs e)
        {
            OpenForm(new Form3());
        }

        private void button5_Click(object sender, EventArgs e)
        {
            Form2 fm2 = new Form2();
            OpenForm(fm2);
        }
        
        private void button6_Click(object sender, EventArgs e)
        {
            Form3 fm3 = new Form3();
            OpenForm(fm3);
        }
    }
}

代码下载:

【免费】C#中在主窗体的某个容器中打开子窗体的方法资源-CSDN文库icon-default.png?t=N7T8https://download.csdn.net/download/anlog/89363912

参考链接:

C#知识|上位机子窗体嵌入主窗体方法(实例) (qq.com)icon-default.png?t=N7T8https://mp.weixin.qq.com/s?__biz=MzU4MzgyMDEzOA==&mid=2247486750&idx=1&sn=c6eb7c358c4034c03bb9e768aef70413&chksm=fda27b1bcad5f20d15abae895e50b336366bf58fe0a0350126cbaf3409350bac7845407e1bef&mpshare=1&scene=1&srcid=05262aK0RkJdJaBcUxjNEd5Z&sharer_shareinfo=214d0d5572caabea801daa11554170a3&sharer_shareinfo_first=5c9166718e80955786a42b0207e83e1f#rd

C# WinForm:无法访问已释放的对象 - asdyzh - 博客园 (cnblogs.com)icon-default.png?t=N7T8https://www.cnblogs.com/asdyzh/p/9902520.html 

特此记录

anlog

2024年5月27日

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

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

相关文章

【C++】Vector的简易模拟与探索

💞💞 前言 hello hello~ ,这里是大耳朵土土垚~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹 💥个人主页&#x…

并查集详解及实现

看完这篇文章你将会知道: 什么是并查集? 并查集的原理。 并查集的JAVA实现。 并查集这部分内容还是很简单的,相信只要认真学,你正在上小学二年级的表弟都能学得会。(▽ʃ♡ƪ) 目录 一、啥是并查集? 二、并查集的…

什么样的展馆场馆才是科技满满?就差一张智慧场馆大屏

随着科技的飞速发展,传统的场馆展示方式已经无法满足现代人对信息获取和体验的需求。智慧场馆大屏作为一种新型的展示方式,应运而生。它将高清大屏显示技术、智能交互技术、数据分析技术等融为一体,为观众带来更加丰富、生动的展示体验。 一…

跨境热销爆款货源哪里找?选品工具不能少

通常,跨境电商找热销货源的几种方法: 1、使用Google Trends、亚马逊销售排行等来追踪和分析当前的市场趋势和热门产品; 2、关注社交媒体、行业论坛和博客等渠道,以获取最新的市场信息和消费者反馈; 3、在主流的跨境…

python-编写函数判断一个三位数是否为水仙花数。

【问题描述】要求编写函数isflower(n)判断一个三位数n是否为水仙花数,如果是,则返回True,否则返回False。在主程序中要求调用该函数并输出三位数中所有的水仙花数。所谓"水仙花数"是指一个3位数,其各位数字立方和等于该数本身。例如…

【动态规划】零基础解决路径问题(C++)

目录 62.路径问题 解法(动态规划): 1. 状态表⽰: 2. 状态转移⽅程: 3. 初始化: 4. 填表顺序: 5. 返回值: 不同路径2.0 解法(动态规划): …

MySQL——存储过程,触发器

BaiduComate: # 问题1: # 问题1: 帮我创建两个表student与score表,要求student表有id,createDate,userName,phone,age,sex,introduce, 要求score表有id&…

迷你手持小风扇哪个牌子质量好点?这五款迷你手持小风扇不要错过

随着空调的普及,我们对夏日热浪的抵抗力逐渐减弱。当从凉爽的空调屋步入闷热的户外、拥挤的交通工具或公共场所时,如何抵御热浪的侵袭成为大众关注的焦点。在这样的背景下,迷你手持小风扇凭借其便携性和即时降温功能,成为众多人的…

和可被k整除的子数组 ---- 前缀和

题目链接 题目: 分析: 补充知识 1. 同余定理: (a-b) % p 0即a-b能被p整除, > a % p b % p 2. c, java中 [负数 % 正数] 的结果是负数, 想要得到正确结果 > (a%pp)%p这道题和<和为k的子数组>类似, 利用前缀和的思想, 计算以i结尾的所有子数组, 前缀和为sum[i] …

炸裂!AI五分钟模仿爆款IP故事,涨粉速度太绝了!

‍ ‍大家好&#xff0c;我是向阳。 今天我要分享一个利用AI技术模仿爆款账号的小技巧&#xff0c;帮助大家迅速增加粉丝。这个方法简单实用&#xff0c;尤其适用于副业和本地生活领域。接下来&#xff0c;我将为大家详细讲解操作步骤。让我们开始吧。 副业赚钱&#xff1a;模…

QT 程序缺少API-开头文件

无法启动此程序&#xff0c;因为计算机中丢失api-ms-win-core-rtlsupport-11-2-0dl。尝试重新安装该程序以解决此问题 因为打包QT程序经常去到的别的电脑会缺少系统的MFC开头 msvcp 的库所以&#xff0c;QT自带的VC安装包体验不够好所以都是自己本地复制一套进行打包。。 有部…

LVDS与IDELAY

摘要&#xff1a;LVDS&#xff08;Low-Voltage Differential Signaling&#xff09;低电压差分信号&#xff0c;是一种低功耗、低误码率、低串扰和低辐射的差分信号技术&#xff1b;LVDS会被经常使用到&#xff0c;使用的过程中难免会碰到时序问题&#xff0c;需要借助IDELAY进…

在看代码的时候,vscode使用书签快速跳转到想看的代码

安装bookmarks 重启vscode之后&#xff0c;摁F1 搜搜索“书签”&#xff0c;更改自己需要的快捷键&#xff0c;我这里更改了三个

生命在于学习——Python人工智能原理(1.2)

一、人工智能的基本知识 6、新一代人工智能驱动因素 &#xff08;1&#xff09;数据量爆发性增长。 &#xff08;2&#xff09;计算能力大幅提升 &#xff08;3&#xff09;深度学习等算法发展 &#xff08;4&#xff09;移动AI创新应用牵引 7、人工智能关键技术 &#x…

降价!免费!AI大模型开启价格战,企业如何“薅”出绿色财富?

近期&#xff0c;国内大模型技术供应商之间的价格战&#xff0c;使得这项原本成本较高的技术变得更加亲民&#xff0c;极大降低了企业的技术采用门槛。这不仅为企业提供了经济实惠的技术解决方案&#xff0c;更为他们的绿色低碳转型之路带来了新的机遇。 随着全球气候变化问题…

认知觉醒:情绪绝对是财富的拦路虎……

认知觉醒 无论是投资还是做生意&#xff0c;跟随大众情绪就一定会亏损&#xff0c;老百姓没有是非认知&#xff0c;只有好恶&#xff0c;所以就很容易被人操控情绪。随便一个社会热点事件&#xff0c;就比如最近的涂磊事件、郭有才事件&#xff0c;打开视频的评论区&#xff0…

GaussDB数据库的备份与恢复

1.逻辑备份-gs_dump gs_dump是一款用于导出数据库相关信息的工具&#xff0c;支持导出完整一致的数据库对象&#xff08;数据库、模式、表、视图等&#xff09;数据&#xff0c;同时不影响用户对数据库的正常访问。 备份sql语句 gs_dump是openGauss用于导出数据库相关信息的工…

吴恩达2022机器学习专项课程C2W2:2.17 TensorFlow实现 2.18 训练细节

这里写目录标题 本周任务TensorFlow训练神经网络模型的简要过程训练模型的三个步骤1.自行训练逻辑回归模型2.TensorFlow训练神经网络模型 TensorFlow训练神经网络模型的代码含义1.定义模型2.指定损失函数和成本函数3.最小化成本函数 总结QuizQuiz1Quiz2 本周任务 神经网络如何…

ZeroTier+Nomachine远程

目录 前述&#xff1a;一、Zero二、Nomachine 前述&#xff1a; 需要远程控制时&#xff0c;服务端与客户端都必须下载这两个软件&#xff01;远程主机&#xff08;被控制的主机&#xff09;和远程客户端&#xff08;控制主机的用户&#xff09;都必须具有网络连接&#xff0c;…