3种方法实现WindowsForm切换窗口

 更新时间:2020年07月02日 09:01:38   作者:zhuanghamiao  
这篇文章主要介绍了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();
}

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

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

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

相关文章

  • c#中虚函数的相关使用方法

    c#中虚函数的相关使用方法

    若一个实例方法声明前带有virtual关键字,那么这个方法就是虚方法。
    2013-02-02
  • C#语言主要语言区域

    C#语言主要语言区域

    这篇文章主要介绍了C#语言主要语言区域,C#语言区域主要包括数组、集合和 LINQ、数组等,下面文化在哪个内容围绕这些区域得相关资料了展开详情,需要的小伙伴可以参考一下
    2021-12-12
  • 基于WPF实现3D画廊动画效果的示例代码

    基于WPF实现3D画廊动画效果的示例代码

    这篇文章主要为大家详细介绍了如何基于WPF实现简单的3D画廊动画效果,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-02-02
  • C#与java TCP通道加密通信实例

    C#与java TCP通道加密通信实例

    这篇文章主要介绍了C#与java TCP通道加密通信,文章通过真实的案例详细讲解说明C#与java TCP通道加密通信的相关资料,需要的小伙伴可以参考一下
    2021-10-10
  • C#代码实现对AES加密解密

    C#代码实现对AES加密解密

    这篇文章主要介绍了C#代码实现对AES加密解密的相关资料,AES是一个新的可以用于保护电子数据的加密算法,需要的朋友可以参考下
    2015-12-12
  • Unity UGUI的Canvas画布组件使用示例详解

    Unity UGUI的Canvas画布组件使用示例详解

    这篇文章主要介绍了Unity UGUI的Canvas画布组件使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • C#实现的SN快速输入工具实例

    C#实现的SN快速输入工具实例

    这篇文章主要介绍了C#实现的SN快速输入工具,以实例的形式详细讲述了C#实现序列号快速输入的方法,是非常实用的技巧,需要的朋友可以参考下
    2014-11-11
  • C#实现Winform鼠标拖动窗口大小时设定窗口最小尺寸的方法

    C#实现Winform鼠标拖动窗口大小时设定窗口最小尺寸的方法

    这篇文章主要介绍了C#实现Winform鼠标拖动窗口大小时设定窗口最小尺寸的方法,涉及WinForm改变窗口大小时动态判断当前窗口尺寸的相关技巧,非常简单实用,需要的朋友可以参考下
    2015-11-11
  • WinForm中变Enter键为Tab键实现焦点转移的方法

    WinForm中变Enter键为Tab键实现焦点转移的方法

    这篇文章主要介绍了WinForm中变Enter键为Tab键实现焦点转移的方法,主要通过一个ControlTools类来实现该功能,需要的朋友可以参考下
    2014-08-08
  • UnityUI中绘制线状统计图

    UnityUI中绘制线状统计图

    这篇文章介绍了UnityUI中绘制线状统计图的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-04-04

最新评论