WindowsForm切换窗口 3种方法实现WindowsForm切换窗口
zhuanghamiao 人气:0在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程序开发过程中常见的页面切换的方式。
加载全部内容