C#子窗体嵌入主窗体

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

运行结果

核心实现:

        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.mzph.cn/pingmian/16647.shtml

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

相关文章

RocketMq源码解析三:路由管理

Nameserver的主要作用是为消息的生产者和消息消费者提供关于主题Topic的路由信息,那么Nameserver需要存储路由的基础信息,还要管理Broker节点,包括路由注册、路由删除等。 一、路由元数据 路由元数据主要保存了topic信息,broker信…

5.22 R语言-正态性检验

正态性检验 正态性检验的目的是确定一组数据是否符合正态分布(也称高斯分布)。在统计分析和数据建模中,正态性假设是许多统计方法和模型的基础。了解数据是否符合正态分布有助于选择适当的统计方法和确保分析结果的有效性。 本文主要从概率…

执法行动高压下,勒索软件攻击仍持续增加

执法行动 最近几年,随着网络犯罪特别是勒索软件犯罪的日益猖獗,勒索软件攻击已经对网络空间安全构成重大威胁。互联网不是法外之地,执法机构也对应加强了执法力度,对全球威胁重大的网络犯罪团伙进行重点打击。对勒索软件团伙所控…

golang、laravel对接stripe海外支付接口的总结和流程(通俗易懂)

目录 stripe是什么? 环境 配置后台 首先让管理员把你设置成为开发者 然后进入后台 然后你要创建产品,开单周期要写每天,我这里理解成每天都会有人买的 获取产品id 获取密钥,后续代码需要用到 支付代码 唤起支付页面 测…

甘肃省大学生志愿服务西部计划报名流程及免冠证件照处理

在甘肃省,大学生志愿服务西部计划是一项旨在鼓励和引导大学生参与西部地区社会服务与发展的重要项目。随着2024年报名季的到来,许多有志青年正准备投身这一有意义的事业。本文将详细介绍报名流程,并提供免冠证件照的处理技巧,帮助…

设计模式11——代理模式

写文章的初心主要是用来帮助自己快速的回忆这个模式该怎么用,主要是下面的UML图可以起到大作用,在你学习过一遍以后可能会遗忘,忘记了不要紧,只要看一眼UML图就能想起来了。同时也请大家多多指教。 代理模式(Proxy&am…

每日AIGC最新进展(12):在舞蹈视频生成中将节拍与视觉相融合、Text-to-3D综述、通过内容感知形状调整进行 3D 形状增强

Diffusion Models专栏文章汇总:入门与实战 Dance Any Beat: Blending Beats with Visuals in Dance Video Generation https://DabFusion.github.io 本文提出了一种名为DabFusion的新型舞蹈视频生成模型,该模型能够根据给定的静态图像和音乐直接生成舞蹈…

免费 OSS 资源 Backblaze B2 使用最新指南

免费的对象存储资源日渐枯竭,Backblaze 是为数不多仍提供免费 OSS 的良心厂商。另外一个则是大名鼎鼎的 Cloudflare R2。虽然免费,但 Backblaze 也修改了政策:如果不验证信用卡的话是不能打开 Public 选项的,或者支付一美金。估计…

24.5.26(树链剖分板子,二分+线段树)

星期一: 补重庆科技 C 二分 牛客传送门 思路:二维前缀和表示到第 i个人第 j个弹巢开了多少发,和st【i】表示第 i个人开的是第几个弹巢 对于 l和r的查询,使用前缀和二分找出第一个…

【UE5.1 角色练习】06-角色发射火球-part1

前言 在上一篇(【UE5.1 角色练习】05-火球发射物-CSDN博客)基础上实现角色可以发射火球的技能 效果 步骤 一、准备 1. 打开角色蓝图,添加两个浮点型变量,分别表示当前的MP值和满状态的MP值 添加一个函数,这里命名…

解密 Alpha 勒索软件

Alpha 勒索软件很容易与 ALPHV 勒索软件混淆,但其实这是两个不同的勒索软件团伙。近期,Alpha 勒索软件团伙在暗网上建立了数据披露网站,并且对外公开了6个受害者。 通常来说,勒索软件运营者在启动数据披露网站前会保持攻击态势。一…

c++ 实现 梯度下降线性回归模型

理论与python实现部分 3.1. 线性回归 — 动手学深度学习 2.0.0 documentation c代码 没能力实现反向传播求梯度&#xff0c;只能自己手动算导数了 #include <bits/stdc.h> #include <time.h> using namespace std;//y_hat X * W b // linreg 函数&#xff1a…

无经验求职者的福音:AI生成简历的便捷之道

第一步你需要先给自己写个简历&#xff0c;简历就是你求职时的一张脸&#xff0c;“漂亮”程度与否那可大了去了。一份漂亮的简历不仅内容满满当当突出重点&#xff0c;而且排版清晰亮眼&#xff0c;能让hr一下子捕捉到重点。 来看看一份漂亮的简历长啥样↓ 工作经历、个人能力…

Go语言

Go语言 Go语言全称Golanguage&#xff0c;Go&#xff08;又称 Golang&#xff09;是 Google 的 Robert Griesemer&#xff0c;Rob Pike 及 Ken Thompson 开发的一种静态强类型、编译并发型语言。于2009年首次发布 官网 特点 简单易学&#xff1a;Go语言语法简洁明了&#x…

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

&#x1f49e;&#x1f49e; 前言 hello hello~ &#xff0c;这里是大耳朵土土垚~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#x…

04Django项目基本运行逻辑及模板资源套用

对应视频链接点击直达 Django项目用户管理及模板资源 对应视频链接点击直达1.基本运行逻辑Django的基本运行路线&#xff1a;视图views.py中的 纯操作、数据返回、页面渲染 2.模版套用1.寻找一个好的模版2.模板部署--修改适配联动 OVER&#xff0c;不会有人不会吧不会的加Q1394…

Java 类加载过程和双亲委派模型

Java 类加载过程概述 在 Java 中&#xff0c;类装载器把一个类装入 Java 虚拟机中&#xff0c;要经过三个步骤来完成&#xff1a;装载、链接和初始化&#xff0c;其中链接又可以分成校验、准备、解析 Java类加载过程分为如下步骤&#xff1a; 1.装载&#xff08; 加载&#xf…

Python编程-后端开发之Django5应用请求处理与模板基础

Python编程-后端开发之Django5应用请求处理与模板基础 最近写项目&#xff0c;刚好用到了Django&#xff0c;现在差不多闲下来&#xff0c;个人觉得单体项目来讲django确实舒服&#xff0c;故写此总结 模板语法了解即可&#xff0c;用到了再看&#xff0c;毕竟分离已经是主流操…

LeetCode300:最长递增子序列

题目描述 给你一个整数数组 nums &#xff0c;找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列&#xff0c;删除&#xff08;或不删除&#xff09;数组中的元素而不改变其余元素的顺序。例如&#xff0c;[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的 子序列 代码…

react 函数组件 开发模式默认被渲染两次

这是 React 刻意为之&#xff0c;函数式组件应当遵从函数式编程风格&#xff0c;每次执行应该是无副作用的(no sideEffect)&#xff0c;在 dev 下多次渲染组件&#xff0c;是为了防止开发者写出有问题的代码。 用 React 写函数组件&#xff0c;如何避免重复渲染&#xff1f; -…