C#制作软件时窗体的弹出与嵌入

文章目录

  • 一、窗体的弹出
  • 二、窗体的嵌入

一、窗体的弹出

这里面我们以Windows窗体应用程序为例,这里面达到的效果如下:
在这里插入图片描述
点击指定按钮,弹出目标窗口。接下来我们看具体操作:
这是我们的主窗体:
在这里插入图片描述
接下来我们需要在这个主窗体所属的项目中右击添加一个窗体:
在这里插入图片描述
这里面设置窗体为我们想要的样子,设置窗体名字为FrmWafers.cs:
在这里插入图片描述
双击主窗体上想要触发弹出窗体的按钮,进行命令设置,只需要输入两行命令就完成了,只需要知道弹出窗体的名字就行:

 FrmWafers objFrm = new FrmWafers();//弹出窗口objFrm.Show();

二、窗体的嵌入

在这里插入图片描述
我们这次需要在按钮之后把之前提到的窗体嵌入到五角星区域,那么按完按钮之后就是这种效果:
在这里插入图片描述
仍然是双击按钮去到程序设置的地方,输入以下程序:

 foreach (Control item in this.spContainer.Panel2.Controls){if (item is Form){Form objControl = (Form)item;objControl.Close();}}objFrm.TopLevel = false;//将子窗体设置成非顶级控件objFrm.WindowState = FormWindowState.Maximized;//让子窗体最大化显示objFrm.FormBorderStyle = FormBorderStyle.None;//去掉窗体的边框objFrm.Parent = this.spContainer.Panel2;//指定子窗体显示的容器objFrm.Show();

这样就完成了,接下来详细解释一下,这段程序:

foreach (Control item in this.spContainer.Panel2.Controls)
{if (item is Form){Form objControl = (Form)item;objControl.Close();}
}

这一部分代码遍历spContainer.Panel2.Controls集合中的所有控件。spContainer是一个分隔容器控件(SplitContainer),它有两个面板(Panel1Panel2),此代码段关注的是Panel2中的控件,如果需要嵌入到其他地方,只需要把程序中的名称换一下。

  • foreach循环遍历Panel2中的每一个控件。
  • if (item is Form)这行代码检查当前控件是否是一个Form对象。在WinForms中,通常不会将一个Form实例作为另一个Form的控件,但在特殊情况下,例如当我们想在父窗体中嵌入一个子窗体时,是可以的。
  • 如果控件确实是一个Form实例,代码就将它转换为Form类型并调用Close()方法。这将关闭并销毁这个窗体实例。这样做是为了防止连续按下按钮重复打开窗口

接下来的部分:

objFrm.TopLevel = false; //将子窗体设置成非顶级控件
objFrm.WindowState = FormWindowState.Maximized; //让子窗体最大化显示
objFrm.FormBorderStyle = FormBorderStyle.None; //去掉窗体的边框
objFrm.Parent = this.spContainer.Panel2; //指定子窗体显示的容器
objFrm.Show();

这一部分代码负责配置和显示一个名为objFrmForm对象。

  • objFrm.TopLevel = false;这行代码将objFrm设置为非顶级窗体。在WinForms中,顶级窗体通常是指没有父窗体的独立窗体。如果我们想将一个窗体显示在另一个窗体内部,那么需要将其TopLevel属性设为false
  • objFrm.WindowState = FormWindowState.Maximized;设置窗体的状态为最大化,使其填满指定的父容器。
  • objFrm.FormBorderStyle = FormBorderStyle.None;移除窗体的边框,这样窗体就不会显示标题栏、控制按钮或边框。
  • objFrm.Parent = this.spContainer.Panel2;objFrm的父控件设置为spContainerPanel2,这意味着objFrm将作为嵌入的子窗体在Panel2中显示。
  • objFrm.Show();最后,调用Show方法来显示objFrm窗体。

综合来讲,这段代码就是关闭Panel2中的所有嵌入窗体(如果有的话),然后配置并显示一个新的嵌入式子窗体。这在制作多文档界面(MDI)或复杂布局的应用程序时常见的手段。

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

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

相关文章

Stable Diffusion 模型下载:Juggernaut(主宰、真实、幻想)

本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八 下载地址 模型介绍 该模型是一个真实模型,并且具有幻想和创意色彩。 作者述:我选取了…

Oracle Linux 8.9 安装 Postman

Oracle Linux 8.9 安装 Postman 1. 安装 Postman2. 启动 Postman 1. 安装 Postman Install epel, sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm sudo dnf upgraderefer: https://snapcraft.io/docs/installing-snap-on-red-hat…

RabbitMQ备份交换机与优先级队列

1. 备份交换机 备份交换机可以理解为 RabbitMQ 中交换机的“备胎”,当我们为某一个交换机声明一个对应的备份交换机时,就是为它创建一个备胎,当交换机接收到一条不可路由消息时,将会把这条消息转发到备份交换机中,由备…

1. 用两种方式在springboot项目中实现适配器模式

文章目录 用两种方式在springboot项目中实现适配器模式1. 场景2. 方式1,通过实现类定义类型字段实现2.1 创建接口2.2 创建mysql实现类2.3 创建oracle实现类2.4 创建接口,在接口中注入service集合,根据每个实现类中定义的dbType进行匹配后进行调用2.5 测试…

幼猫咬不动猫粮该怎么办?

亲爱的猫友们,遇到幼猫咬不动猫粮的情况,是不是很让人着急呢?别担心,让我们一起来探讨一下解决这个问题的方法。🐱🍚 首先,我们得理解幼猫的牙齿和消化系统发育还不够成熟,所以咬不动…

算法刷题day30:递归

目录 引言一、有序分数二、正则问题三、带分数四、约数之和 引言 本篇文章主要讲了递归的一些题型,递归也是一种思想,主要是在各种题中显现这种思想,你必须要脑子里能够清楚它大概的一种路线是怎样的,或者说要抽象出来它的功能是…

Arduino ESP8266 SSD1306 硬件I2C+LittleFS存储GBK字库实现中文显示

Arduino ESP8266 SSD1306 硬件I2C+LittleFS存储GBK字库实现中文显示 📍相关篇《Arduino esp8266 软件I2C SSD1306 +LittleFS存储GBK字库实现中文显示》 🌼显示效果: ✨将部分函数重构,和上面相关篇的软件I2C通讯相关接口函数移植过来,除了汉字显示采用自己写的API函数外…

使用 ReclaiMe Pro 恢复任意文件系统(Win/Linux/MacOS)

天津鸿萌科贸发展有限公司是 ReclaiMe Pro 数据恢复软件授权代理商。 ReclaiMe Pro 是一个通用工具包,几乎可以用于从所有文件系统(从 Windows 系列文件系统、Linux 和 MacOS)中恢复数据。此外,考虑到数据恢复工作的具体情况&…

如何实现Git Push之后自动部署到服务器?

在平时个人开发的过程中是不是有这样的烦恼: 项目开发完成,Push之后 登录服务器,手动git pull,然后运行部署命令 这真的很烦诶! 那么能不能Git push之后,远端服务器自动 Git pull 然后运行部署命令呢&a…

2023行政区域

几乎所有业务系统,都会涉及行政区域。国家统计局 官网上公开了所有的区域编码,一年一更新。但只能在线查看,没有提供完整数据库下载的连接。为此,我编写了一个简陋的 python 脚本,抓取了近几年的数据,供大家…

ctf杂项总结

1.文件无法打开 1.1.文件拓展名损坏/错误导致 方法: 1.使用kali当中的file命令查看,之后修改为正确的后缀即可 2.通过16进制编辑器打开查看文件头 3.文件头残缺/错误,可以先使用kail当中的file命令查看它的类型,之后再通过 16…

C# EPPlus导出dataset----Excel2绘制图像

一、生成折线图方法 /// <summary> ///生成折线图 /// </summary> /// <param name="worksheet">sheet页数据 </param> /// <param name="colcount">总列数</param> /// &l…

(每日持续更新)jdk api之StreamCorruptedException基础、应用、实战

博主18年的互联网软件开发经验&#xff0c;从一名程序员小白逐步成为了一名架构师&#xff0c;我想通过平台将经验分享给大家&#xff0c;因此博主每天会在各个大牛网站点赞量超高的博客等寻找该技术栈的资料结合自己的经验&#xff0c;晚上进行用心精简、整理、总结、定稿&…

vue-vben-admin的编译运行

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 更多nbcio-boot功能请看演示系统RuoYi-Nbcio亿事达企业管理平台 gitee源代码地址 后端代码&#xff1a;…

变量的本质和命名规则

变量的本质 内存:计算机中存储数据的地方&#xff0c;相当于一个空间变量本质:是程序在内存中申请的一块用来存放数据的小空间 变量命名规则与规范 规则: 不能用关键字 关键字:有特殊含义的字符&#xff0c;JavaScript 内置的一些英语词汇。例如:let、var、if、for等>只…

Jenkins入门指南:自动化构建与部署的艺术

概要&#xff1a; 本篇博客旨在为新手提供一个全面、易懂的Jenkins入门指南。我们将从Jenkins的基本概念讲起&#xff0c;逐步深入到安装、配置、以及如何使用Jenkins来自动化软件的构建、测试和部署过程。内容将涉及Jenkins的核心功能&#xff0c;插件管理&#xff0c;以及与…

代码随想录-动态规划7(139. 单词拆分)

139. 单词拆分 class Solution { public:bool wordBreak(string s, vector<string>& wordDict) {vector<bool> dp(s.size()1, false);unordered_set<string> wordDict_set;for (int i0; i<wordDict.size(); i){wordDict_set.insert(wordDict[i]);}dp…

掌握AI技术,轻松学习游戏开发

进入游戏开发的世界&#xff0c;就像打开了一扇通往未来的大门&#xff0c;而掌握AI技术正是这扇门的钥匙。随着AI技术在游戏行业的迅速崛起&#xff0c;它不仅为游戏设计和用户体验带来了革命性的改变&#xff0c;更为新入行者展示了一个充满创新和机遇的领域。特别是百川智能…

HTML CSS学习

# html css 日常学习记录---学习途径--渡一教育-袁老师# 元素包含关系 以前&#xff1a;块级元素可以包含行级元素&#xff0c;行级元素不可以包含块级元素&#xff0c;a元素除外 元素的包含关系由元素的内容类别决定。 例如&#xff0c;查看h1元素中是否可以包含p元素 总…

缓存把我坑惨了..

故事 春天&#xff0c;办公室外的世界总是让人神往的&#xff0c;小猫带着耳机&#xff0c;托着腮帮&#xff0c;望着外面美好的春光神游着… 一声不和谐的座机电话声打破这份本该属于小猫的宁静&#xff0c;“hi&#xff0c;小猫&#xff0c;线上有个客户想购买A产品规格的商…