WindowsForm切换窗口的几种常见实现
在Windows Form平台下实现窗口跳转,常见的有以下几种方式,比如通过Show/ShowDialog方法显示新的窗口,通过多文档界面(MDI)在父窗口中加载子窗口,或者是通关过在窗口中动态加载自定义控件,比如通过将窗口中的Panel控件作为容器,将一些自定义元素作为视图界面控件,动态加载到Panel控件中。下面我们将简单介绍这几种方式
Show/ShowDialog
通过这两种方法可以很简单的实现窗口跳转,
Home home = new Home();
home.Show();Home home = new Home();
home.ShowDialog();
通过Show方法可以显示非模式窗体,实际是将窗口设置为窗体的顶级对象。显示窗体等效于将Visible属性设置为true。 调用Show方法后,Visible属性返回一个true值,直到调用Hide方法为止。
而ShowDailog方法就是将窗体显示为一个模式对话框。只有将对话框关闭之后才会执行之后的代码。
Home home = new Home();
home.Show();
//home.ShowDialog();
Debug.WriteLine("弹出Home窗口");//使用Show方法时,程序显示窗口后会继续执行输出代码,而ShowDialog只有将显示的窗口关闭后才会继续执行
MDI窗口
这种方式实际上是通过创建一个MDI父窗口容器,然后让各个子窗口显示到父窗口容器中。
首先我们需要将父窗口的IsMdiContainer属性设置为True(确定是否将窗口设置为MDI容器),然后具体的跳转代码如下
// 加载登录窗口
private void Form_Container_Load(object sender, EventArgs e)
{Login login = new Login();login.MdiParent = this;login.Show();
}// 登录实现
private void button1_Click(object sender, EventArgs e)
{// 账号密码验证// ...Home home = new Home();home.MdiParent = this.MdiParent;home.Show();
}
从上图中,如果根据平时的一些软件开发需求,我们看到这样的显示是有一些问题的,比如,登录和主菜单页面重叠显示,子页面带有边框等等。
在子窗口的加载事件中,增加窗口边框的处理如下
private void Login_Load(object sender, EventArgs e)
{this.FormBorderStyle = FormBorderStyle.None;//将窗口设置无边框模式,即去掉边框和最大化等按钮this.WindowState = FormWindowState.Maximized;//将子窗口设置为最大化,即在父容器中起到居中的效果
}
通过单例模式,创建一个全局容器实例,并提供一个公共的子窗口加载方法
static Form_Container instance;public static Form_Container Instance
{get{if (instance == null){instance = new Form_Container();}return instance;}
}public void LoadChildPage(Form form)
{// 每次加载子窗口的时候关闭其他窗口foreach (var item in instance.MdiChildren){item.Close();}form.MdiParent = instance;form.Show();
}
现在我们可以通过下面的方式进行子页面的切换
Form_Container.Instance.LoadChildPage(new Login());Form_Container.Instance.LoadChildPage(new Home());
动态加载子控件
这种方式的实现与MDI的方式类似,我们先创建UC_Loging和UC_Home两个自定义控件作为子页面;然后创建一个容器窗口Form_Container,在Form_Container中放一个Panel控件作为子页面的容器,通过将自定义控件绑定到panel实现页面切换的效果。
public partial class Form_Container : Form
{public Form_Container(){InitializeComponent();}static Form_Container instance;public static Form_Container Instance{get{if (instance == null){instance = new Form_Container();}return instance;}}public Panel PnlContainer{get { return pnlContainer; }set { pnlContainer = value; }}public void LoadChildPage(Control control){PnlContainer.Controls.Clear();PnlContainer.Controls.Add(control);}private void Form_Container_Load(object sender, EventArgs e){Form_Container.Instance.LoadChildPage(new UC_Login());}
}
以上就是在Windows Form程序开发过程中常见的页面切换的方式。
WindowsForm切换窗口的几种常见实现相关推荐
- linux与w7之间的切换,w7系统切换窗口怎么操作_教你w7系统切换窗口的几种方法
在我我们的日常学习和工作中,为了方便我们能够快速的进行操作,通常都会使用切换窗口的方式来解决,这样既方便又节省时间.可是对于一些win7新用户来说,却不知道如何操作切换窗口的功能,对此,小编就在这里简 ...
- python如何切换windows窗口_selenium+python 切换窗口的几种方法
第一种方法: 使用场景: 打开多个窗口,需要定位到新打开的窗口 使用方法: # 获取打开的多个窗口句柄 windows = driver.window_handles # 切换到当前最新打开的窗口 d ...
- selenium切换窗口的几种方法小结
第一种方法 使用场景 打开多个窗口,需要定位到新打开的窗口: 使用方法: # 获取打开的多个窗口句柄 windows = driver.window_handles # 切换到当前最新打开的窗口 dr ...
- 高效程序员秘籍(1):使用AutoHotKey快速切换窗口
当我们打开电脑做一些事后,任务栏中就会有若干已打开应用程序的窗口,在它们之间切换,绝大部分人使用下面两种方式: 1.使用Tab键 2.直接用鼠标在任务栏中找到目标窗口再点击 第一种方式效率 ...
- Dreamwear如何创建javascript_内存管理+如何处理4种常见的内存泄漏
JavaScript是如何工作的:内存管理+如何处理4种常见的内存泄漏 潮水自会来去,但心志得坚若磐石.即便成不了那根定海神针,也至少不是那随意被拍上岸的野鬼游魂.by 一枚热汤圆 几周前,我们开始了 ...
- 9种常见的前端跨域解决方案
9种常见的前端跨域解决方案(详解) 2019.09.02 21:54 73879浏览 一.什么是跨域? 在前端领域中,跨域是指浏览器允许向服务器发送跨域请求,从而克服Ajax只能同源使用的限制. ...
- Ubuntu下的几种常见输入法极其配置方式(zt)
许多新人对于Ubuntu下的中文输入法都很不满意,因此,这次的文章就给大家大概讲解一下Ubuntu下的几种常见输入法.并推荐 几个我自己觉得不错的 一.基础知识:SCIM 1.定义 SCIM是一个广泛 ...
- oracle ora-各种常见java.sql.SQLException归结
oracle ora-各种常见java.sql.SQLException归纳 java.sql.SQLException错误! ORA-00904: --invalid column name ...
- 【特征提取+分类模型】4种常见的NLP实践思路
↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:陈琰钰,清华大学,Datawhale成员 越来越多的人选择参加算法 ...
最新文章
- myeclipse的buildpath 和lib引入的区别
- 入门十大Python机器学习算法(附代码)
- python序列化详细教程
- 由浅到浅入门批量渲染(二)
- Activity-Service-Receiver-Provider
- 安卓事件机制与页面跳转
- java应用程序利用Exe4j打包exe文件
- centos-修改分辨率
- 配置多个git账号_一台电脑,两个及多个git账号配置
- ES9新特性_ES9正则扩展-dotAll模式---JavaScript_ECMAScript_ES6-ES11新特性工作笔记056
- Spring系列(一):Spring的基本概念及其核心
- 【Andorid学习】declare-styleable:自定义控件的属性
- [转]MySQL修改root密码的多种方法
- (进来补知识啦!)利用双四选一数据选择器74153实现十六选一数据选择器(包含74153简单解释)
- iapp进度条倒计时_倒计时进度条app
- 11 空间平面方程 : 参数方程、向量式方程、行列式方程、三点式方程、点法式方程、一般方程
- 七周数据分析01_数据分析思维
- opencv 手指位置检测
- Coggle打卡——Linux使用基础
- Python opencv 在图片上写字