首先是我们进行窗口间的跳转,尤其注意的是winform程序里面的空间都是中线程安全的。但是注意的是如果你在一个线程中操纵另外的控件,这时候会提示你一个错误,这个错误的解决方法准备单独的在另一篇文章中来讲。

好了,这时候回到主题上吧,怎么来实现界面间的跳转吧!假设我们想要从Form1跳转到Form2,那么可以有以下的集中方法:

1. 使用form的show属性(注:show弹出来的是普通无模式窗体,与下个要讲的ShowDialog是有区别的)

Form2 frm=new Form2();

frm.show();

this.close();          //this 这儿是Form1对象,例如在跳转到Form2后关闭释放所持有的资源

this.Dispose();        //这也是为了释放资源

注:Dispose()也是用来释放资源的,但是不同的是如果窗体属于多文档界面应用程序的一部分且是不可见的,那么Close将不会释放窗体,从而我们必须自己手动调用Dispose来释放窗体资源。

还有要注意的是在无模式窗体上调用Close方法时候,不能调用Show方法使得窗体可见,因为窗体的资源已经被释放。所以若是要隐藏窗体,那么可以调用Control.Hide方法。

2.使用form的ShowDialog属性

Form2 frm=new Form2();

frm.ShowDialog();

this.Dispose();

使用ShowDialog和show产生的窗体到底有什么不一样呢?呵呵,其实ShowDialog弹出的窗体是一种有模式的对话框,并且当前活动的窗体为弹出的窗口的持有者。

窗体和对话框要么是有模式的,要么是无模式的。“模式”窗体或对话框必须关闭或隐藏,然后才能继续使用应用程序的其余部分

还有注意的是在多线程里面,调用用showdialog方法可以避免线程的错误,具体原因也不是很清楚。

3.可以在Program.cs中做手脚

我们知道,Program里面的程序是配置了我们整个应用程序的入口点。那么就修改吧,

将以下的本来的代码注释掉:   
       Application.EnableVisualStyles();
       Application.SetCompatibleTextRenderingDefault(false);
       Application.Run(new logForm());

改成:

Form logFrm = new logForm();              //为第一个显示的窗体
        if (logFrm.ShowDialog() == DialogResult.OK)
        {
              Application.Run(new MainForm());    //为第二个要弹出的窗体
                
        }

然后只要在要跳转的代码段写如下:

this.DialogResult = DialogResult.OK;      //this 指向的是logForm

这样就OK了。

winform程序中界面的跳转问题的更多相关文章

  1. 在Winform程序中设置管理员权限及为用户组添加写入权限

    在我们一些Winform程序中,往往需要具有一些特殊的权限才能操作系统文件,我们可以设置运行程序具有管理员权限或者设置运行程序的目录具有写入的权限,如果是在操作系统里面,我们可以设置运行程序以管理员身 ...

  2. (转)在Winform程序中设置管理员权限及为用户组添加写入权限

    本文转载自:http://www.cnblogs.com/wuhuacong/p/5645172.html 在我们一些Winform程序中,往往需要具有一些特殊的权限才能操作系统文件,我们可以设置运行 ...

  3. Halcon的HWindowControl控件在WinForm程序中的使用介绍(重点解决图片缩放的问题)

     Halcon的HWindowControl控件在WinForm程序中的使用介绍(重点解决图片缩放的问题) 2016-12-04 20:11 362人阅读 评论(4) 收藏 举报  分类: Halco ...

  4. 在Winform程序中使用Spire.Pdf实现页面添加印章处理

    在一些场合,我们往往需要使用印章来给每页文档加盖一个印章,以表示该文档经过某个部门的认证的,常规的做法就是打印文档后盖章,如果需要电子档再行扫描一下.这样的的处理,如果文档很多,且仅仅需要电子文档的就 ...

  5. WinForm程序中两份mdf文件问题的解决

    在项目中用程序中嵌入mdf文件的方式来进行SQLServer数据库开发非常方便,用来发布开源项目等很方便,点击就可以运行,免部署,特别是在教学中用起来更加方便,老师不用先将数据库文件detach再发给 ...

  6. 在C#中winform程序中应用nlog日志工具

    在C#中winform程序中应用nlog日志工具,配置文件简单应用. 文件名 nlog.config,请注意修改属性为"始终复制",发布时候容易遇到不存在文件的错误提示. 通过Nu ...

  7. C#中Winform程序中如何实现多维表头【不通过第三方报表程序】

    问题:C#中Winform程序中如何实现多维表头. 在网上搜了很多方法,大多数方法对于我这种新手,看的都不是很懂.最后在新浪博客看到了一篇比较易懂的文章:[DataGridView二维表头与合并单元格 ...

  8. .NET混合开发解决方案7 WinForm程序中通过NuGet管理器引用集成WebView2控件

    系列目录     [已更新最新开发文章,点击查看详细] WebView2组件支持在WinForm.WPF.WinUI3.Win32应用程序中集成加载Web网页功能应用.本篇主要介绍如何在WinForm ...

  9. .NET混合开发解决方案8 WinForm程序中通过设置固定版本运行时的BrowserExecutableFolder属性集成WebView2控件

    系列目录     [已更新最新开发文章,点击查看详细] 在我的博客<.NET混合开发解决方案7 WinForm程序中通过NuGet管理器引用集成WebView2控件>中介绍了WinForm ...

随机推荐

  1. ajax_demo:GET POST发送数据

    GET,通过url发送数据 <%@ page language="java" contentType="text/html; charset=UTF-8" ...

  2. PC-[WIN7]此计算机无法联接家庭组

    不能启用 HomeGroup Listener 解决: 1.设定为自动开始:Function Discovery Provider HostFunction Discovery Resource Pu ...

  3. nyoj 119 士兵杀敌(三)【线段树区间最大值最小值差】

    士兵杀敌(三) 时间限制:2000 ms  |  内存限制:65535 KB 难度:5   描述 南将军统率着N个士兵,士兵分别编号为1~N,南将军经常爱拿某一段编号内杀敌数最高的人与杀敌数最低的人进 ...

  4. 高级IO复用应用:聊天室程序

    简单的聊天室程序:客户端从标准输入输入数据后发送给服务端,服务端将用户发送来的数据转发给其它用户.这里采用IO复用poll技术.客户端采用了splice零拷贝.服务端采用了空间换时间(分配超大的用户数 ...

  5. 设置button 不可被点击

    mGetCode.setEnabled(false);//不可被点击 mGetCode.setEnabled(true);//可被点击 bt.setClickable(true);//设置点击为tru ...

  6. 在Mybatis-spring中由于默认Autowired导致不能配置多个数据源的问题分析及解决

    在使用Mybatis中,通常使用接口来表示一个Sql Mapper的接口以及相对应的xml实现,而在spring的配置文件中,通常会使用MapperScannerConfigurer来达到批量扫描以及 ...

  7. 20169210《Linux内核原理与分析》第八周作业

    第一部分:实验 首先还是网易云课堂的学习,这次的课程是进程的创建和进程的描述. linux进程的状态与操作系统原理中的描述的进程状态有些不同,例如就绪状态和运行状态都是TASK_RUNNING. Li ...

  8. GWT用frame调用JSP

    Frame htmlFrame = new Frame("../OurHome/modules/core/mainIndex.jsp?merchantId="+merchantId ...

  9. Android应用源码图书馆管理系统带服务端数据库

    本项目是一套基于安卓的图书馆管理系统,包括jsp服务端源码,安卓客户端源码和mysql数据库.代码比较简单,供学习anroid与j2ee交互.例如Sqlite的使用.安卓客户端与jsp的web服务端的 ...

  10. 征服 Redis + Jedis + Spring (三)—— 列表操作【转】

    一开始以为Spring下操作哈希表,列表,真就是那么土.恍惚间发现“stringRedisTemplate.opsForList()”的强大,抓紧时间恶补下. 相关链接: 征服 Redis 征服 Re ...