转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> VB.NET程序 >> 正文
Henry手记-VB.net WinForm中的FORM初探(二)         ★★★★

Henry手记-VB.net WinForm中的FORM初探(二)

作者:闵涛 文章来源:闵涛的学习笔记 点击数:2392 更新时间:2009/4/23 19:01:08

Henry手记-VB.net WinForm中的FORM初探(二)

韩睿 (2002.9.25)

 

二、怎么样切换两个窗体?

在上一节中,我们认识到vb.net窗体的新特性,也知道了怎么样show出一个窗体了。那么面对一个这样的需求(也是真实的提得较多的问题)。怎么样实现两个窗口间的切换。即:

窗体一:Form1,上面有个button1

窗体一:Form2,上面有个button2

点击button1,会show出Form2;点击button2,会show出Form1。

如果在vb6中,我们还真不用费工夫写文章来讨论了//hehe。上一节中我们讨论的是 Visual Basic .NET 与 Visual Basic6 在窗体处理机制上的关键区别——你只有先创建窗体实例,然后才可以显示窗体外观、访问窗体属性及其控件。

这节中讨论的是另一个区别:Visual Basic 6.0 项目自动创建的默认窗体实例都能被当成全局变量使用,也就是说,项目中的任何代码都能直接引用窗体,并且每次被引用的都是该窗体的同一个实例。Vb.net呢?是不能这样做了。

我们先来做个小实验,来加深类与对象的概念。

你在一个窗体frmMain里,放四个按钮,在每个按钮的click事件里写上:

dim frm1 as new form1

frm1.show

那么,你将会看到四个一模一样的form1。

明白了吧?但此form1非彼form1,都是form1类的一个个实例化的内容。

所以我们不能指望在调用的时候,命名一个局部的frm1就能一直都对form1的实例进行控制,这是不可能的。

也就是说,在button1的click事件中写:

dim frm2 as new form2

frm2.show

me.hide

在button2的click事件中写:

dim frm1 as new form1

frm1.show

me.hide

是有问题的,你发现问题在哪了吗?就在于click事件中写的都是局部变量,每一次都会新生成一个Form的实例,而hide起来的那个form的实例却再也show不回来了。如果不在form的closing(关闭时触发)或其它类似事件中做任何处理,该程序的进程是不会停止的,这是由于做为主线程的第一个form1是被hide起来了,它还在运行着,进程当然不会终止喽。

解决方法有很多,比如

1)      在module中定义Form的全局变量

2)      用share变量模拟vb6中窗体切换的实现

一个一个说明一下吧,希望对朋友们有所启发:

1) 在module中定义Form的全局变量

给程序工程加一个模块,用于存放公用变量,及启动控制用:
''''Module1.vb
Module Module1
    Public F1 As New Form1()  ‘定义Form1的公用变量实例
    Public F2 As New Form2() ‘定义Form1的公用变量实例
    Sub Main()
        Application.Run(F1) ‘这句话表明程序启动了modele后,会接下来启动f1,即form1的一个实例
    End Sub
End Module
 
''''Form1.vb
Class Form1
  ...
   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
      F2.Show()      ''''利用公用变量 
      F1.hide()
  End Sub
End Class
 
''''Form2.vb
Class Form2
  ...
   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
      F1.Show()
      F2.Hide()
  End Sub
End Class
 
同时请在:解决方案管理器-〉windowsapplication1.sln -〉右点鼠标 -〉属性 -〉通用属性->常规->启动对象 -〉改为Module1

上面最后一句话的意思是让程序在启动时先执行Module1中的代码。初始化两个Form的公用变量,进程入口在它的sub main,用于启动F1(Form1的实例)。用这个方法,我们可以完成很多窗体间控件控制(比如Form1上的操作结果显示到Form2的文本框中去)和数据传递。在这里要注意的是,只有关闭了F1窗体,程序才会被终止。我们可以做一些处理,比如在Form的closing事件里加入end等等。

但在vb.net中其实是不赞成使用公用变量的,一是由于生存期的管理,二是引用时的混乱问题。那么我们还有没有其它的解决方法?

2)      用share变量模拟vb6中窗体切换的实现

其实有个最简单但是极有用的方法,不知道您想到了吗?就是利用vb.net自带的升级向导工具进行升级呀!(尽管很多人骂这个工具不行,但有的工作它还是可以做得很好的)

我就这样做了,先在vb6中写了两个Form,

Form1:

Private Sub Command1_Click()

  Form2.Show

  Me.Hide

End Sub

 

Private Sub Form_Unload(Cancel As Integer)

  End         ’关闭Form1,程序结束

End Sub

 

Fomr2:

[1] [2]  下一页


[C语言系列]C# WinForm 中Label自动换行 解决方法  [电脑应用]c# winform 打包部署 自定义界面 或设置开机启动
[电脑应用]C# WinForm 关闭登陆窗体,打开主窗体的实现  [C语言系列]winform datagridview如何获取选中行的索引
[C语言系列]c# _winform实现网页上用户自动登陆,模拟网站登录  [C语言系列]C#的winform中实现tabPage的隐藏 .
[C语言系列]NET 中C#的switch语句的语法  [C语言系列]C# WinForm中Application.StartupPath与AppDomain…
[系统软件]托拽Explore中的文件到VB.net的窗口  [系统软件]WinForm 程序实现XP风格
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台