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

(0)

相关推荐

  • C# WindowsForm程序同时启动多个窗口类

    C# WindowsForm程序同时启动多个窗口类,具体内容如下 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace MVCProject { /// <summary> /// 多窗口同时启动类 /// <remarks>继承A

  • WindowsForm实现警告消息框的实例代码

    警告消息框主要是用来向用户户展示诸如警告.异常.完成和提示消息.一般实现的效果就是从系统窗口右下角弹出,然后加上些简单的显示和消失的动画. 创建警告框窗口 首先我们创建一个警告框窗口(Form),将窗口设置为无边框(FormBoderStyle=None),添加上图片和内容显示控件 创建好警告框后,我们先让他能够从窗口右下角显示出来, public partial class AlertMessageForm : Form { public AlertMessageForm() { Initia

  • WindowsForm实现TextBox占位符Placeholder提示功能

    在WinForm程序中,实现TextBox文本输入框占位符的方式也很多,最常用的是方式基于Windows Api SendMessage函数发送EM_SETCUEBANNER消息,或者通过TextBox自带的焦点事件处理. SendMessage函数实现 创建一个继承TextBox的ZhmTextBox输入框控件,新增Placeholder属性,在Placeholder的set方法中发送EM_SETCUEBANNER消息 public class ZhmTextBox: TextBox { pr

  • 如何用WindowsForm给窗口添加一些简单的动画效果

    在显示或者隐藏窗口的时候,可以利用Windows API中的AnimateWindow函数实现一些特殊的效果.主要的动画类型有四种:滚动.幻灯片.折叠或展开和alpha混合渐变. 窗口动画效果 首先定义动画工具类,引入AnimateWindow函数. public class WindowsEffects { public const int AW_ACTIVATE = 0x00020000; // 激活窗口.不要在AW_HIDE中使用此值. public const int AW_BLEND

  • WindowsForm移动一个没有标题栏的窗口的方法

    在WinForm程序中,要移动没有标题栏的窗口,基本的实现思路是监听需要拖动窗口内的控件的鼠标事件,然后将鼠标位置发送给窗口进行相应的位移就可以了.通过借用Windows API也可以很容易实现这一点,比如像下面这样. public class Win32Api { public const int WM_SYSCOMMAND = 0x112; public const int SC_DRAGMOVE = 0xF012; [DllImport("user32.Dll", EntryPo

  • 如何让WindowsForm缩小到系统匣过程详解

    如何让windowsForm能像MSN一样缩小后会跑到右下方的系统匣内, 只要利用NotifyIcon就可以做到相同的功能,MSDN NotifyIcon组件说明 首先先开启一个windowsForm项目,在工具栏将NotifyIcon拉到windowsForm上. 接着先为NotifyIcon指定Icon和Text,就是在系统匣会出现的小图和鼠标移过去时出现的文字. 执行结果 如果要在窗口缩小时,只显示在系统匣显示, 反之则变成只显示在工作列,就必须要在Form的SizeChanged事件做控

  • 3种方法实现WindowsForm切换窗口

    在Windows Form平台下实现窗口跳转,常见的有以下几种方式,比如通过Show/ShowDialog方法显示新的窗口,通过多文档界面(MDI)在父窗口中加载子窗口,或者是通关过在窗口中动态加载自定义控件,比如通过将窗口中的Panel控件作为容器,将一些自定义元素作为视图界面控件,动态加载到Panel控件中.下面我们将简单介绍这几种方式 Show/ShowDialog 通过这两种方法可以很简单的实现窗口跳转, Home home = new Home(); home.Show(); Home

  • python3 selenium 切换窗口的几种方法小结

    第一种方法: 使用场景: 打开多个窗口,需要定位到新打开的窗口 使用方法: # 获取打开的多个窗口句柄 windows = driver.window_handles # 切换到当前最新打开的窗口 driver.switch_to.window(windows[-1]) 举例说明: # _._ coding:utf-8 _._ """ :author: 花花测试 :time: 2017.05.03 :content: 使用第一种方法切换浏览器 ""&quo

  • python3+selenium4实现切换窗口与iframe的方法

    在自动化测试过程中,有时后会遇到元素定位方式没有问题,但是依旧抛出无法找到元素的异常的问题,通常情况下,如果元素定位没有问题,但还是无法找到元素,则可能是由于当前焦点不在指定页面或iframe导致的,以下将对两种情况分别进行说明 1.切换窗口 比如我们现在有这样一个需求,进入百度首页后,点击新闻,然后在新闻页面的搜索框输入selenium 而使用selenium要如何实现呢,在对selenium不是很熟悉的情况下,仅仅学习了之前的内容,写出的代码就可能会抛出找不到贴吧搜索输入框元素异常,示例代码

  • JS关闭窗口与JS关闭页面的几种方法小结

    第一种:JS定时自动关闭窗口<script language="javascript"><!--function closewin(){self.opener=null;self.close();}function clock(){i=i-1document.title="本窗口将在" + i + "秒后自动关闭!";if(i>0)setTimeout("clock();",1000);else clo

  • 使用POST方式弹出窗口的两种方法示例介绍

    最近在做一个功能需要弹窗,但是不能用get方式,因为get方式对url的长度有限制,所以必须用post,总结了两个方法 1. 复制代码 代码如下: var $form1=$("<form action='"+url+"' id='f' name='f' method='post'></form>"); $form1.append($("<input type='hidden' name='"+i+"' va

  • 三种方法让Response.Redirect在新窗口打开

    Response.Rederect在默认情况下是在本页跳转,所以除了在js中用window.open或是给A标签添加target属性之外,在后台似乎不能来打开新的页面,其实不然,通过设置form的target属性同样可以让Response.Rederect所指向的url在新的窗口打开.下面用三种方法来实现. 1 .给form指定target属性,那么本页面中所有的Response.Rederect都将在新的窗口中打开.代码如下: 复制代码 代码如下: protected void Page_Lo

  • Jquery实现点击切换图片并隐藏显示内容(2种方法实现)

    我们的电脑屏幕大小是固定的,那么如何在有限的空间放更多的内容呢? 我们应该给用户足够的选择权,当他们想要看某些内容的时候可以很快的看到,不想看的时候就把他隐藏.于是就有了题目说的这个问题. 其实这个问题很简单,那么,之所以拿出来跟大家分享,一方面我们大家相互交流,另一方面,也是对自己的学习的一种总结. 这里我想到了两种方法,给大家分享一下. 好了不多说,下面看代码: 第一种,是常规的方法: [javascript] 复制代码 代码如下: $(function(){ var images = ['

  • jQuery之浮动窗口实现代码(两种方法)

    第一种方法:预览: Html代码 复制代码 代码如下: <html> <head> <title>浮动窗口</title> <link type="text/css" rel="stylesheet" href="css/overflow.css" /> <script type="text/javascript" src="js/jquery.js&

  • 实现点击下箭头变上箭头来回切换的两种方法【推荐】

    我所知道的常用的就这两种. 第一种:说明一下我用的是fontawesome字体,首先要去官网下载来用 <span class='btn btn-more'> <i class='fa fa-angle-down'></i> <i class='fa fa-angle-up hidden'></i> </span> 我用的是bootstrap,所以hidden是自带的,上面的初始状态就是下箭头angle-down是显示的,然后上箭头an

  • Vue 实时监听窗口变化 windowresize的两种方法

    下面给大家分享两种方法来介绍Vue 实时监听窗口变化 windowresize,具体内容如下所示: 方法一: First-step : 定义变量 data(){ return{ formLabelWidth : '123px' } }, Second-step:   根据生命周期 在mounted 中绑定 窗口变化 mounted(){ const that = this window.onresize = () => { return (() => { window.screenWidth

随机推荐