首页 | 互联网 | IT动态 | Cisco | Windows | Linux | Java | .Net | Oracle | 华为 | 存储世界 | 服务器 | 网络设备 | IDC | 安全 | 求职招聘
IT培训 | 数字网校 | 技术专题 | 电子书下载 | 教学视频 | 网页设计 | 平面设计 | 解决方案 | 直播室 | 虚拟考场 | 搜索 | 博客 | 沙龙 | 论坛
首页 | JAVA | C# | VB | VB.NET | C/C++ | delphi | 工程管理 | 其他语言 | 论坛
各大城市软件开发培训、软件人才免费咨询热线:400-700-5807
 您现在的位置: 中国IT实验室 >> 桌面开发 >> VB.net >> 文章正文
VB.NET中的多窗体编程:升级到 .NET
来源:ChinaItLab 作者:佚名 时间:2007-8-30

  一、前言

  在微软 Visual Basic 6.0 中,一条简单的 “Form2.Show” 语句就能显示项目中的第二窗体 (Form2)。然而,它在 Visaul Basic .NET 中却行不通了,因为 .NET 版在窗体处理机制上有了很大的变化。刚刚转向 .NET 版的 Visaul Basic 程序员实在难以接受这么大的变化,因为现在连“显示第二窗体”这么简单的任务都无从下手。我希望能够通过本文向大家介绍 Visaul Basic .NET 与早期的 Visual Basic 在窗体处理机制上有哪些不同之处,以及如何按照 .NET 的模式进行多窗体编程。

  二、Visual Basic 6.0 对 Visual Basic .NET

  窗体(窗体类)正如其它类一样,无论在哪个版本的 Visual Basic 中都是必不可少的。窗体也有属性、方法和事件,且在同一个项目中也允许创建多个窗体实例 (参见 http://msdn.microsoft.com/library/en-us/off2000/html/defInstance.asp)。例如:假设你在 Visual Basic 6.0 项目中定义了一个窗体 Form2 ,则你可以创建它的 3 个实例并同时显示出来。代码如下:

Dim myFirstForm As Form2
Dim mySecondForm As Form2
Dim myThirdForm As Form2

Set myFirstForm = New Form2
Set mySecondForm = New Form2
Set myThirdForm = New Form2

myFirstForm.Show
mySecondForm.Show
myThirdForm.Show

  以上代码用 3 条 Set 语句生成了 3 个 Form2 实例。你可以把它原封不动地搬到 Visual Basic .NET 中运行,它照样能够正确显示 3 个 Form2 窗体。在这里,“Form2” 其实相当于一个普通的类。Visual Basic 6.0 允许代码直接访问尚未实例化的窗体类;然而Visual Basic .NET 却规定在访问任何类之前都要进行实例化,而且必须借助实例来访问类。这种变化当然有可能造成许多疑惑。Visual Basic 6.0 等早期版本能自动生成每个窗体的默认实例,从而允许直接通过窗体名称来访问窗体。例如:在Visual Basic 6.0项目中,可以直接用代码“Form2.Show ”显示 Form2 的默认实例;然而在 Visual Basic .NET 中,这么做只会引发错误,因为 Visual Basic .NET 既不会创建默认的窗体实例,也不允许直接访问尚未实例化的窗体类。

  这就是 Visual Basic .NET 与早期 Visual Basic 在窗体处理机制上的关键区别——你只有先创建窗体实例,然后才可以显示窗体外观、访问窗体属性及其控件。它们还有另一个区别:Visual Basic 6.0 项目自动创建的默认窗体实例都能被当成全局变量使用,也就是说,项目中的任何代码都能直接引用窗体,并且每次被引用的都是该窗体的同一个实例。例如:你可以在窗体中 button 控件的 Click 事件处理程序里用代码 “Form2.Show” 显示 Form2 窗体,然后用下列代码改变 Form2 中某个 textbox 控件 (TextBox1)的内容:

Form2.TextBox1.Text = "Fred"

  可是,你在 Visual Basic .NET 中运行它却会得到一条错误消息:“Reference to a Non-Shared Member Requires an Object Reference”(引用非共享类成员必须使用对象指针)。这是在提醒你:你正在访问的类尚未进行实例化。有一个简便的解决方案:当你在调试过程中得到上述错误消息时,就把相应的语句:

Form2.Show()

改成:

Dim myForm2 As New Form2()
myForm2.Show()

  此方案适用于大多数场合。然而,当项目中还有其它代码访问同一个 Form2 实例 (比如改变其中 TextBox1 的文本) 时,你可能会考虑把下列语句:

Form2.TextBox1.Text = "Fred"

改成:

Dim myForm2 As New Form2()
myForm2.TextBox1.Text = "Fred"

  不幸的是,这段代码创建了一个新的 Form2 实例,结果你所访问的窗体不再是原先的 Form2 ,这岂不麻烦了!更坏的是,你不会因此而得到任何错误消息提示,同时你先前调用 Show() 显示的 Form2 窗体也不会发生任何变化。

[1] [2] [3] [4] 下一页  

【责编:Youping】
中国IT教育热线咨询
相关文章
多线程、Socket技术及委托技术的关系
VB.Net连接各种数据库的几种方法
Java中消除实现继承和面向接口编程
编程软件系列之C++编程技巧
解析VB的事件驱动编程
用VB.NET定制Windows控件
VB.NET中监视文件夹的变化
VB.NET中对象的克隆
用纯JAVA语言编程读取MAC地址的实现
VB.NET中的TextBox控件详解
推荐文章

 精彩友情推荐
·锐捷交换机报价
·锐捷交换机
·锐捷网络网络交换机
·smc交换机
·smc交换机报价
·IDC资讯大全
·机房品质万里行
·IDC托管必备知识
·全国IDC报价
·网站推广优化
最新更新 推荐文章
·框架:J2EE WEB应用架构分析03-13
·几种VC++数据库开发技术的相对比…03-13
·利用C#实现标注式消息提示窗口03-13
·用C#创建COM对象03-13
·Visual C#多线程参数传递浅析03-13
·Visual C#多线程参数传递浅析03-13
·基于HOOK和MMF的Win密码渗透技术11-15
·Visual C++设计超强仿QQ自动伸缩…11-15
·Java SE 6.0实现高质量桌面集成开…11-15
·史玉柱东山再起幕后高人11-15
·Visual Basic 9.0隐式类型的局部…09-30
·用C#创建COM对象09-06
·IT管理十大失误及其对策08-30
·VC中利用MFC设计绘图程序初步08-23
·JAVA中对象创建和初始化过程08-23
·C语言中的位域的使用08-09
·浅谈Java桌面应用程序开发08-09
·C#的前途如何?08-02
·几种VC++数据库开发技术的相对比较07-12
·用Visual C#实现网络封包监视07-12
·VB.NET中的TextBox控件详解07-12
·VB.NET实现PC与掌上电脑PPC的双向通信07-05