3种方法实现WindowsForm切换窗口

 更新时间:2020年11月3日 15:20  点击:2032

在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切换窗口内容请搜索猪先飞以前的文章或继续浏览下面的相关文章希望大家以后多多支持猪先飞!

[!--infotagslink--]

相关文章

  • 利用JS实现点击按钮后图片自动切换的简单方法

    下面小编就为大家带来一篇利用JS实现点击按钮后图片自动切换的简单方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-10-25
  • js组件SlotMachine实现图片切换效果制作抽奖系统

    这篇文章主要介绍了js组件SlotMachine实现图片切换效果制作抽奖系统的相关资料,需要的朋友可以参考下...2016-04-19
  • C# Winform中实现主窗口打开登录窗口关闭的方法

    这篇文章主要介绍了C# Winform中实现主窗口打开登录窗口关闭的方法,这在需要用户名密码的软件项目中是必用的一个技巧,要的朋友可以参考下...2020-06-25
  • 详解C#切换窗口

    最近项目不多忙,于是抽点时间巩固下切换窗口问题,感兴趣的朋友跟着小编一起学习吧...2020-06-25
  • Element图表初始大小及窗口自适应实现

    这篇文章主要介绍了Element图表初始大小及窗口自适应实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-07-10
  • C#中添加窗口的步骤详解

    下面小编就为大家带来一篇C#中添加窗口的步骤详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • C# Windows API应用之基于GetDesktopWindow获得桌面所有窗口句柄的方法

    这篇文章主要介绍了C# Windows API应用之基于GetDesktopWindow获得桌面所有窗口句柄的方法,结合实例形式分析了GetDesktopWindow函数用于获取窗口句柄的具体使用方法与相关注意事项,需要的朋友可以参考下...2020-06-25
  • js切换光标示例代码

    复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title...2013-10-13
  • C#获取进程的主窗口句柄的实现方法

    C#获取进程的主窗口句柄的实现方法,需要的朋友可以参考一下...2020-06-25
  • javascript的列表切换【实现代码】

    下面小编就为大家带来一篇javascript的列表切换【实现代码】。小编觉得挺不错的,现在分享给大家,也给大家做个参考。...2016-05-05
  • Vue鼠标滚轮滚动切换路由效果的实现方法

    这篇文章主要介绍了Vue鼠标滚轮滚动切换路由效果的实现方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-08-04
  • Pyqt5 实现窗口缩放,控件在窗口内自动伸缩的操作

    这篇文章主要介绍了Pyqt5 实现窗口缩放,控件在窗口内自动伸缩的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-09
  • C#隐藏主窗口的方法小结

    这篇文章主要介绍了C#隐藏主窗口的方法,列举了C#隐藏窗口的三种常用方法,涉及C#窗体操作的常用技巧,需要的朋友可以参考下...2020-06-25
  • vue打开新窗口并实现传参的图文实例

    这篇文章主要给大家介绍了关于vue打开新窗口并实现传参的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-04
  • PyQt5 实现给无边框widget窗口添加背景图片

    这篇文章主要介绍了PyQt5 实现给无边框widget窗口添加背景图片的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-09
  • Pytorch如何切换 cpu和gpu的使用详解

    这篇文章主要介绍了Pytorch如何切换 cpu和gpu的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-01
  • JavaScript实现弹出窗口效果

    这篇文章主要为大家详细介绍了JavaScript实现弹出窗口效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-12-10
  • C# WPF 通过委托实现多窗口间的传值的方法

    这篇文章主要介绍了C# WPF 通过委托实现多窗口间的传值的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • Ajax打开新窗口被浏览器拦截怎么办

    小编推荐的这篇文章介绍了两种Ajax打开新窗口被浏览器拦截的解决方法,有需要的同学可以参考一下 最近在做支付时发现打开支付窗口时被浏览器拦截了,百度了一下才...2017-01-22
  • JS实现点击登录弹出窗口同时背景色渐变动画效果

    这篇文章主要介绍了JS实现点击登录弹出窗口同时背景色渐变动画效果,涉及JavaScript基于鼠标事件及时间函数定时触发形成渐变动画的相关技巧,需要的朋友可以参考下...2016-03-28