在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程序开发过程中常见的页面切换的方式。
到此这篇关于3种方法实现WindowsForm切换窗口的文章就介绍到这了,更多相关WindowsForm切换窗口内容请搜索自学编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持自学编程网!
- 本文固定链接: https://zxbcw.cn/post/189921/
- 转载请注明:必须在正文中标注并保留原文链接
- QQ群: PHP高手阵营官方总群(344148542)
- QQ群: Yii2.0开发(304864863)