服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C# - 3种方法实现WindowsForm切换窗口

3种方法实现WindowsForm切换窗口

2022-09-21 13:58zhuanghamiao C#

这篇文章主要介绍了3种方法实现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();
}

3种方法实现WindowsForm切换窗口

从上图中,如果根据平时的一些软件开发需求,我们看到这样的显示是有一些问题的,比如,登录和主菜单页面重叠显示,子页面带有边框等等。

在子窗口的加载事件中,增加窗口边框的处理如下

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());

3种方法实现WindowsForm切换窗口

动态加载子控件

这种方式的实现与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());
 }
}

3种方法实现WindowsForm切换窗口

以上就是在Windows Form程序开发过程中常见的页面切换的方式。

到此这篇关于3种方法实现WindowsForm切换窗口的文章就介绍到这了,更多相关WindowsForm切换窗口内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://www.cnblogs.com/zhuanghamiao/p/WindowsForm-WindowSwitch.html

延伸 · 阅读

精彩推荐
  • C#C#中Socket通信用法实例详解

    C#中Socket通信用法实例详解

    这篇文章主要介绍了C#中Socket通信用法,以实例形式较为详细的分析了UDP及TCP两种通信方式的具体实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下...

    C#教程网8802021-10-26
  • C#C#利用Task实现任务超时多任务一起执行的方法

    C#利用Task实现任务超时多任务一起执行的方法

    这篇文章主要给大家介绍了关于C#利用Task实现任务超时,多任务一起执行的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定...

    change_4_now11322022-02-16
  • C#C#中一个高性能异步socket封装库的实现思路分享

    C#中一个高性能异步socket封装库的实现思路分享

    下面小编就为大家分享一篇C#中一个高性能异步socket封装库的实现思路,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    源之缘8622022-02-13
  • C#如何最大限度地降低多线程C#代码的复杂性

    如何最大限度地降低多线程C#代码的复杂性

    这篇文章主要介绍了如何最大限度地降低多线程C#代码的复杂性,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    楚人Leo10032022-07-14
  • C#C#编程实现DataTable添加行的方法

    C#编程实现DataTable添加行的方法

    这篇文章主要介绍了C#编程实现DataTable添加行的方法,结合两个实例形式分析了C#操作DataTable实现动态添加行的相关技巧,具有一定参考借鉴价值,需要的朋友可...

    Jan.David3652021-11-03
  • C#C#异步编程详解

    C#异步编程详解

    本文主要介绍异步编程中Task、Async和Await的基础知识。具有很好的参考价值,下面跟着小编一起来看下吧...

    东秦男人5792021-12-23
  • C#C#获取鼠标在listview右键点击单元格的内容方法

    C#获取鼠标在listview右键点击单元格的内容方法

    下面小编就为大家带来一篇C#获取鼠标在listview右键点击单元格的内容方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来...

    C#教程网5192021-12-21
  • C#使用C#创建Windows服务的实例代码

    使用C#创建Windows服务的实例代码

    这篇文章主要介绍了使用C#创建Windows服务的实例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    cnc7902022-01-17