C#子窗体嵌入主窗体

embedded/2024/9/24 0:29:19/

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

运行结果

核心实现:

        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.ppmy.cn/embedded/45261.html

相关文章

无障碍环境:科技融入日常,无障碍无处不在

在当今社会,推动无障碍环境的建设已经成为提升全民福祉、实现社会包容性发展的重要议程。尤其对于盲人群体,一个精心设计的无障碍环境不仅意味着物理上的可达性,更是精神上的尊重与关怀,为他们打开了一扇通往独立生活与平等参与的…

使用Python进行图像锐化的4个基础操作

想要让你的照片从模糊变锐利,就像魔法师轻轻一挥魔杖?今天我们就来学习如何用Python施加这神奇的“锐化滤镜”!🎉 首先,你需要一位得力助手——Pillow库,它能让我们轻松处理图像。如果你还没安装&#xff…

Ansible04-Ansible Vars变量详解

目录 写在前面6 Ansible Vars 变量6.1 playbook中的变量6.1.1 playbook中定义变量的格式6.1.2 举例6.1.3 小tip 6.2 共有变量6.2.1 变量文件6.2.1.1 变量文件编写6.2.1.2 playbook编写6.2.1.3 运行测试 6.2.2 根据主机组使用变量6.2.2.1 groups_vars编写6.2.2.2 playbook编写6.…

Navicat连接Oracle

目标: 1.Navicat连接Oracle数据库,报错 无监听程序。 一、下载安装Navicat15 https://zhuanlan.zhihu.com/p/675991635 下载安装资源 链接:百度网盘 请输入提取码 提取码:1u1q 二、测试SQL PLUS连接数据库 在全部程序--》Ora…

正缘画像 api数据接口

测测正缘画像,相貌特征,高矮胖瘦,黑白美丑,对方何许人也,远嫁近娶,何方定居,家庭观,持家爱家,生活质量,富裕贫穷,健康情况,测算结果仅…

vue前端Echars

<template><div :class"className" :style"{height:height,width:width}" /> </template><script> import * as echarts from echarts require(echarts/theme/macarons) // echarts theme 柱状图 import resize from ./mixins/re…

机器学习中的神经网络重难点!纯干货(上篇)

纯干货&#xff01; 目录 前馈神经网络 基本原理 公式解释 一个示例 卷积神经网络 基本原理 公式解释 一个示例 循环神经网络 基本原理 公式解释 一个案例 长短时记忆网络 基本原理 公式解释 一个示例 自注意力模型 基本原理 自注意力机制 具体步骤 公式解…

Mongodb数据库

Mongodb Mongodb是一个基于分布式文件存储的数据库&#xff0c;官方地址:https://www.mongodb.com/ Mongodb操作语法与JavaScript类似&#xff0c;容易上手 核心概念 数据库&#xff1a;数据库是一个数据仓库&#xff0c;数据库服务下可以创建很多数据库&#xff0c;数据库…