栏目列表
本年度VB学习之第三章
发布时间:2012-12-25   点击:   来源:本站原创   录入者:毛宇凯

 

Visual Basic 为编程人员提供了强大的绘图功能支持,在本章,我们将学会基本的绘图方法。
在 VB 中,主要通过两种办法进行图像绘制:一种是利用 ActiveX 控件,如用图形框显示图片;另外一种是通过使用 VB 语言本身的函数和方法,通过在屏幕上绘制点、线和图形来制作。
一、图形框控件的主要属性:
图形框控件(PictureBox)可以用来显示位图、JPGE、GIF、图标等格式的图片,在工具箱面板中,图形框控件的图标如图一:

图一
1、Name 属性:
命名规则为:PicX ,如 PicMove 、PicShow ,等等。
2、Picture(图片)属性:
本属性用来返回或设置控件中要显示的图片,可以通过属性窗口进行设置。如果要在程序运行过程中载入图片,常常使用 LoadPicture 函数,其语法规则为:
对象.Picture = LoadPicture("图形文件的路径与名字")
如:PicMove.Picture = Loadpicture("c:\Picts\pen.bmp")
3、AutoSize(自动显示)属性:
本属性决定了图形框控件是否自动改变大小以显示图片的全部内容。当值为 True ,图象可以自动改变大小以显示全部内容;当值为 False ,则不具备图象的自我调节功能。
二、图形框控件的主要事件:
它可以接收 Click(单击)事件与 DblClick(双击)事件,还可以在图片框中使用 Cls(清屏)、Print 方法。在实际使用过程中,它多是作为一种图形容器出现,所以常常是跟其他控件搭配使用的,如点击一个按钮,图形框自动装入图片,等等。
三、图像框控件(Image)的主要属性:
跟图形框一样,图像框控件也具有诸如 Name、Picture 等属性,以及 Loadpicture 的方法,但在图像自适应问题上有所不同。
PictureBox 用 AutoSize 属性控制图形的尺寸自动适应,而 Image 控件则用 Stretch 属性对图片进行大小调整。如图二:

图二
四、图像框与图形框控件的区别:
1、图形框是“容器”控件,可以作为父控件,而图像框不能作为父控件,其他控件不能作为图像框的子控件。
图形框作为一个“容器”,可以把其他控件放在其内作为它的“子控件”,当图形发生位移,其内的子控件也会跟着一起移动。

图三
2、图形框可以通过 Print 方法显示与接收文本,而图像框不能。
3、图像框比图形框占用内存少,显示速度更快一些,因此,在图形框与图像框都能满足设计需要时,应该优先考虑使用图像框。
在本节,我们要实现两张不同图片在同一个图形框内的切换,同时可以启用与禁用图形框的自动适应功能。

图一(切换前)

图二(切换后)
一、设计:
1、创建如图一的界面:
显示标签:
Name:LblShow  Caption:现在显示的是第一张图
图形框控件:
Name:PicShow  AutoSize:None
自动适应复选框:
Name:ChkAutoSize
图片切换按钮:
Name:CmdShow  Caption:图片二
2、先在通用区声明如下变量:
Dim X As Integer
Dim IWidth As Integer
Dim IHeight As Integer
其中,X 准备用来做为图片切换的条件,当 X 为 1 ,图片切换按钮可以切换到图片二;当 X 为 2 ,图片切换按钮可以切换到图片一。
IWidth 与 IHeight 准备用来储存图形框的初始宽度与高度,以便在图形框发生大小变化后回复到原样。
3、程序打开时自动载入图片一:
这样,图片切换按钮就应该能够切换到图片二,所以将 1 赋给 X :
Private Sub Form_Load()
PicShow.Picture = LoadPicture("E:\稿件\Ccidnet\vb\image\vb3-2-1-copy.gif")
X = 1
End Sub
4、自动适应功能的实现:
Private Sub ChkStretch_Click()
If ChkStretch.Value = 1 Then
IWidth = PicShow.Width
IHeight = PicShow.Height
PicShow.AutoSize = True
Else
PicShow.AutoSize = False
PicShow.Width = IWidth
PicShow.Height = IHeight
End If
End Sub
上面程序的意思是,如果复选框被选中,那么先将原始图形框的宽度与高度赋给 IWidth、IHeight ,然后再通过激活 PicShow 的 AutoSize 功能达到图形框的自动适应;如果复选框没被选中,那么禁止 PicShow 的 AutoSize 功能,然后将图形框原来的高度(现在的 IHeight)和宽度(现在的 IWidth)赋值给图形框以恢复原样。
5、图片切换:
Private Sub CmdShow_Click()
If X = 1 Then
PicShow.Picture = LoadPicture("E:\稿件\Ccidnet\vb\image\vb3-2-2-copy.gif")
LblShow.Caption = "现在显示的是第二张图"
CmdShow.Caption = "图片一"
X = 2
Else
PicShow.Picture = LoadPicture("E:\稿件\Ccidnet\vb\image\vb3-2-1-copy.gif")
LblShow.Caption = "现在显示的是第一张图"
CmdShow.Caption = "图片二"
X = 1
End If
End Sub
在上面的程序中,先对 X 进行判断,如果 X 为 1 ,那么图形框显示图片二,显示标签改变成“现在显示的是第二张图”字样,作为图形切换的按钮,
Caption 变成“图片一”,然后再让 X 为 2 好进入另外一种情况;当 X 为 2 ,那么图形框显示图片一,显示标签与切换按钮发生相应变化。
二、联想
记 得第一次设计这个程序时,并没有引入 X 这个辅助变量,而是通过鼠标点击的动作来进行判断的,即,当原始图形框中显示的是图片一,那么鼠标点击一次,即奇数次,图形框中会切换到图片二;当鼠标点击第二次,即偶数次,图形框可以切换到图片一;以此类推。所以可以通过次数取余,如果余数为 0 ,那么图形框可以切换到图片一;余数为 1 ,图形框可以切换到图片二。
具体程序大家可以自行思考,此处不再赘述。
利用直线与形状控件,可以使窗体上显示的内容更为丰富,如在窗体上增加简单的线条和实心图形,等等。
利用直线控件,可以建立简单的直线,通过修改其属性,还可以改变直线的粗细、色彩,以及线型。
通过设置形状的属性,用户可以画出圆、椭圆,以及圆角矩形,同时还能设置形状的色彩与填充图案。
主要属性:
除了其他通用属性外,直线与形状控件还具有一些比较独特的属性。
1、BorderStyle(边框类型),实用于直线与形状。
TransParent:透明,边框不可见。
Solid:实心边框,最常见。
Dash:虚线边框。
Dot:点线边框。
Dash-Dot:点划线边框。
Dash-Dot-Dot:双点划线边框。
Inside Solid:内实线边框。
2、FillStyle(填充类型),实用于形状。
Solid:实心填充。
TransParent:透明填充。
Horizontal Line:以水平线进行填充。
Vertical Line:以垂直线进行填充。
Upward Diagonal:向上对角线填充。
Downward Diagonal:向下对角线填充。
Cross:交叉线填充。
Diagonal Cross:对角交叉线填充。
3、Shape(形状),实用于形状。
Rectangle:矩形。
Square:正方形。
Oval:椭圆形。
Circle:圆形。
Rounded Rectangle:圆角矩形。
Rounded Square:圆角正方形。
除了前面谈到的用控件显示与绘制图形的方法外,VB 还提供了一组庞大的方法用来绘制点、线、面,以及设置前景、背景色等各种方法。
一、设置当前绘图点:
在 VB 中,可以通过设置窗体或图形框的 CurrentX 与 CurrentY 属性来设置当前绘图点。CurrentX 与 CurrentY 决定了绘制或显示的起始坐标,在设计时,这两个属性不可用。
二、绘制点、线、面的方法:
1、点的绘制法:
在指定对象(如窗体、图形框)上的指定位置处绘制点,还可以为点指定颜色,语法如下:
对象名.Pset (X,Y),[Color]
X ,Y 分别为点的水平与垂直坐标,Color 为点的颜色,是可选项。 2、直线的绘制法:
在对象上绘制直线,语法如下:
对象名.Line (X1,y1) - (X2,Y2), [Color]
(X1,Y1) 是直线的起点,(X2,Y2)是直线的终点,Color 为可选项。
如图一:

图一
2、图形框的代码是:
Private Sub Picture1_Click()
Picture1.Line (350, 1020)-(2050, 1020)
End Sub
3、绘制矩形:
用 Line 方法还可以绘制矩形,语法如下:
对象名.Line (X1,Y1) - (X2,Y2), [Color], B ,[F]
其中,(X1,Y1) 是矩形的左上角座标,(X2,Y2)是矩形右下角座标,Color 为矩形边框的颜色,使用参数 B 而不用 F ,那么矩形用当前的填充色(FillColor)与填充方式(FillStyle)对矩形进行填充;如果使用了参数 F ,那么矩形以边框的颜色进行填充。如图二:

图二
特别注意,用 Line 画矩形框,如果不用其他参数,那么 B 与坐标(X2,Y2)之间应该有两个逗点,一个是紧跟坐标2,一个表示 Color 省略了,如:Picture1.Line (500,500) - (1000,1000),,B
4、绘制圆、椭圆、弧:
用 Circle 方法可以绘制圆、椭圆与弧,语法如下:
对象名.Circle (X,Y), Radius, [Color,start,end,aspect]
其中,(X,Y)是圆、椭圆或弧的圆心坐标,Radius 是半径,这两个参数是必须项;Color 是圆的轮廓色,Start 与 End 是弧的起点与终点位置。其范围是 -2 —— 2Pi ;Aspect 是圆的纵横尺寸比,默认值是 1 即圆,如图三:

图三
三、颜色、前景与背景色的设置:
1、颜色函数 RGB()
在前面关于卷动条控件(综合示例五)的讲解中,我们讲述了色彩的设置问题,而这正是 RGB 颜色函数的原理所在。色彩设置的方法如下:
RGB(Red,Green,Blue)
不要忘了,Red、Green、Blue 每种色彩各有 0——255 种成份,三种色彩不同参数的搭配,就产生了丰富多彩的现实世界。
2、前景色的设置:
通过对 ForeColor(前景色属性)的设置,可以返回或设置对象的前景色。
3、背景色的设置:
对 BackColor 属性进行设置,就可以返回或设置对象的背景色。
4、图形的清除:
用 Cls 方法可以清除窗体或图形框在程序运行中绘制的图形,语法如下:
对象名.Cls
任何一个应用程序,都需要通过各种命令来达成某项功能,而这些命令,大多数是通过程序的菜单来实现的,如我们常常用到的记事本的菜单
 

图一
VB 提供了一个菜单编辑器,专门用来制作各式各样的菜单,它在标准工具栏中的图标如图二:

图二
双击该图标,弹出如图三的窗口,通过这个窗口,我们就可以制作菜单了。

图三
当然,程序光是有菜单还不行,它只是为用户提供了便捷的操作接口,程序功能的最终实行,还必须通过给这些菜单输入复杂的程序才能得以实现。
下面,我们以 Windows 自带的笔记本为例,介绍如何用 VB 制作菜单。
一、菜单制作:
1、双击如图二的菜单编辑器图标,然后弹出如图三的编辑窗口。
2、标题:显示在菜单中的文本,这里,我们输入“文件(&F)”字样。
(&F) 是什么东西?这是为了方便用户使用键盘操作菜单,当程序运行时,(&) 字样不会出现,而是在字母 F 下加上一条横线,这表示,只要用户在按住 Alt 键的同时再按下 F 键,就相当于用鼠标点击“文件”这个菜单命令了。也就是说,文件菜单的快捷键是 Alt+F 。
名称:本菜单在程序中的名称,主要用作程序调用,因此记得用英文名,另外,名字最好一目了然,这里,我们将“文件”菜单命名为 MenuFile 。
“文件”菜单制作完毕,如图四:

图四
3、点击菜单编辑器上的“下一个”按钮,制作下一个菜单,这时,我们看到,编辑区域自动提到了下一行,如图五:

图五
点击向右按钮,本行前面出现了四个小点,表示本菜单降了一级,是二级菜单(依此类推,如果要制作三级菜单,只需要 再点一下向右按钮进行降级就行了)。然后用第二步的方法,制作“新建”(MenuNew)、“打开”(MenuOpen)、“保存” (MenuSave)、“另存为”(MenuSaveOther)菜单,结果如图六:

图六
上面讲到了用 & 符号制作快捷键的方法,这里我们再使用 VB 菜单编辑器中的“快捷键”定制方法制作快捷键。
找到“新建”菜单,先在“新建(&N)”字样后面添加六个空格,以便后面显示的快捷键跟菜单名之间有点空隙,然后在快捷键下拉列表中选择 Ctrl+N ,这表示在按住 Ctrl 键的同时按 N 键就能使用“新建”命令了,如下图:
 
4、制作菜单分隔线:
“另存为”菜单下面是条分隔线,那么分隔线如何表示呢?很简单,只需在“标题”框中输入“-” 就行了,命名为 MenuSperate1 ,然后点按“下一个”按钮制作下面的菜单。如图七:

图七
5、同理可做“页面设置”(MenuPage)、“打印”(MenuPrint)、“分隔线二”(MenuSeprate2)、“退出菜单”(MenuQuit),如图八:

图八
6、制作“编辑”菜单:
由于“编辑菜单”是一级菜单,所以在完成“退出”菜单,并点按“下一个”按钮后,别忘了点按向左按钮,将当前菜单进行升级,这时可以看到,本行前面的四个小点消失了,如图九:

图九
7、根据前面学到的知识,我们制作“编辑”(MenuEdit)、“撤消”(MenuUndo)、“分隔条三” (MenuSeprate3)、“剪切”(MenuCut)、“复制”(MenuCopy)、“粘贴”(MenuPaste)、“删除” (MenuDel)、“分隔条四”(MenuSeprate4)、“全选”(MenuSelectAll)、“时间/日期”(MenuDate)、“分隔 条五”(MenuSeprate5)、“自动换行”(MenuWrap)、“设置字体”(MenuFont)菜单。如图十:

图十
8、添加 RichText 控件:
最后在窗体内添加一个 RichText 控件,结果如图十一:

图十一
在默认的工具箱面板中,RichText 控件没有罗列出来,大家可以用鼠标右键点击工具箱面板,在弹出的面板中选择“部件”,然后在弹出的窗口中找到“Microsoft Rich Textbox Control 6.0”,勾选本控件的复选框,最后“确定”就行了,如图十二:

图十二
二、菜单属性设置:
对各个菜单的属性设置,可以在制作菜单的过程中进行,也可以在菜单设计完毕后集中进行处理。
1、菜单的“有效”性:
只有当菜单处于“有效”状态时才能被使用。
对于一个新的空白文件来说,撤消、剪切、复制、粘贴的命令缺少操作对象,所以在初始状态下,它们应该是“无效”的。
打开菜单编辑器,找到“撤消”菜单,然后将“有效”复选框前的勾去掉,这样,“撤消”菜单无效了,如图十三:

图十三
同理,将“剪切”、“复制”、“粘贴”三个菜单变为“无效”。
2、复选菜单:
在记事本中,“自动换行”可以对文本的显示进行换行控制,默认状态为“非自动换行”模式,点击一次则启动“自动换行”模式,再点击一次就取消“自动换行”,象这种菜单,我们称为“复选菜单”。
复选菜单的制作非常简单,只需找到要作为复选菜单的那个菜单,然后勾选“复选”按钮就行了,如图十四:

图十四
但是,此时的复选按钮还不健全,需要代码的支持方能正常使用,具体情况在下一节的示例中讲述。
有如图一这样一个小程序,通过“菜单”下的色彩设置,可以将窗体的背景分别改为“红”、“绿”、“蓝”色,点击“菜单”下的“退出”,则自动退出程序。

图一
一、界面设置:
根据第一节学到的知识,我们制作一个如图二的菜单。

图二
需要注意的是,“菜单”为一级,“色彩设置”、“退出”为二级、“红色”、“绿色”、“蓝色”为三级菜单,根据图二中每行前面点的多少可以判断出来。
另外,不要忘记勾选“红”、“绿”、“蓝”三种色彩的菜单前的“复选”选项。
二、输入程序代码:
1、退出菜单:
在 VB 中,End 是专门用来退出程序的命令,因此,我们在“退出菜单”中输入如下代码:
Private Sub MenuQuit_Click()
End
End Sub
这样,只要点击本菜单,自动退出程序。
2、复选菜单的判断:
在 VB 中,可以用如下语法对复选菜单进行判断:
复选菜单名.Checked = True/False
当值为 True ,复选菜单被选中;值为 False ,菜单未被选中。
3、我们要让程序在初始状态下保持本色,在 Form 的装入事件中输入以下代码:
Private Sub Form_Load()
MenuRed.Checked = False
MenuGreen.Checked = False
MenuBlue.Checked = False
End Sub
这段程序,让三个复选菜单都处于未被选中状态(在程序运行时起作用,在设计过程中,三个复选菜单始终是处于选中状态)。
4、当按下红色菜单(MenuRed):
Private Sub MenuRed_Click()
MenuRed.Checked = True
MenuGreen.Checked = False
MenuBlue.Checked = False
Form1.BackColor = vbRed
End Sub
这段代码,让“红色菜单”处于选中状态,而其他颜色的菜单处于未被选中状态,同时将窗体的背景色变为红色(VbRed)。
5、当按下绿色菜单(MenuGreen):
Private Sub MenuGreen_Click()
MenuRed.Checked = False
MenuGreen.Checked = True
MenuBlue.Checked = False
Form1.BackColor = vbGreen
End Sub
绿色菜单处于选中状态,其他菜单非选中,同时窗体背景色变为绿色。
6、按下蓝色菜单:
Private Sub MenuBlue_Click()
MenuRed.Checked = False
MenuGreen.Checked = False
MenuBlue.Checked = True
Form1.BackColor = vbBlue
End Sub
蓝色菜单处于选中状态,其他菜单非选中,同时窗体背景变为蓝色。
7、最后按 F5 键,如何,程序正常运行了吧?
三、联想
本节我们讲到复选菜单是如何对选中进行判断的,那就是看 Checked 值是否为 True 。
前面我们学过单选按钮(OptionBUtton)、复选按钮(CheckBox),它们也有是否被选中的判断,那么,它们有什么不同呢?
注意,单选按钮是否选中的判断:
单选按钮名.Value = True/False 。由于单选按钮只能二选一或多选一,所以往往不需判断,只需响应 Click 事件就行了。
复选按钮的判断:
复选按钮名.Value = 0/1/2 。由于复选按钮可以一次多选,所以对它的判断最为复杂,常常需要用到诸如 If……Then 等条件语句进行判断。但它跟复选菜单不同的是,复选菜单常常只能多中选一,比如上面例子中,选择了“红色菜单”就不能选择“蓝色菜单”,等等。 记不清楚的朋友可以回头复习一下,此处不再赘述。
我们在上一节示例的基础上,来制作如图一的小程序,每点击一次“增加信息”命令,菜单上会自动增加一个“信息”菜单,每点击一次“清除菜单”命令,程序自动清除当前信息菜单;当菜单回复原样,即只剩“信息”菜单时,“清除菜单”无效。

图一
一、界面设置:
在第二节最终结果的基础上,创建如图一的界面,需要注意的是,“信息”菜单(MenuHint)必须在前面的“索引”框中填入数字 0,如图二:

图二
在程序中,只要在“索引”文本中输入了数字,就代表这个菜单成为了一个“菜单数组”,通过这个“菜单数组”可以实现菜单的动态增加与清除。
二、程序代码:
1、为“信息菜单”指定变量:
对 于增加或清除菜单命令,我们可以这样看:原始的“信息菜单”为 MenuHint(0) ,这也是索引值为 0 的意义所在;那么增加的一个信息菜单就应该为 MenuHint(1),再增加一个,就应该为 MenuHint(2),依此类推;清除一个信息菜单也类似,如果当前是 MenuHint(X),那么清除一个后应该为 MenuHint(X-1),依此类推。
指定索引值为 HintNumber ,那么增加时,应该是 HintNumber = HintNumber + 1 ;清除时,应该是 HintNumber = HintNumber -1 。
2、变量的作用域:
一个变量的作用域倒底有多大? 这得由变量的类型来决定。当一个变量只在某一个过程或事件(如某个按钮的单击事件)中起作用,那么它就是局部变量,可以在事件中直接定义;当一个变量可以在整个窗体内供使用,那么它可能是窗体层变量或全局变量,凡是在这个窗体上的事件都可以对这个变量进行引用,这种变量只能在“通用”过程中进行“声明”。
因为 HintNumber 既要在“增加菜单”事件中引用,又要在“清除菜单”事件中引用,所以我们将它作为窗体层变量在“通用”过程的“声明”中对其进行定义,如图三:

图三
图三中的代码如下:
Dim HintNumber As Integer
3、在窗体的载入事件中让 HintNumber 为初始值 0 ,再加上原来的代码,结果如图四:

图四
4、“增加信息”菜单的 Click 事件:
Private Sub MenuAdd_Click()
HintNumber = HintNumber + 1
Load MenuHint(HintNumber)
MenuHint(HintNumber).Caption = "信息" & HintNumber
End Sub
上面程序的意义在于,先计算 HintNumber + 1 并将结果赋给新的 HintNumber ,然后通过 Load 命令打开一个新菜单 MenuHint(HintNumber) ,并让新菜单的标题变成“信息X”,其中,X是数字,表示这是第几个信息菜单。
5、“清除信息”菜单的 Click 事件:
Private Sub MenuClear_Click()
If HintNumber = 0 Then
Exit Sub
Else
Unload MenuHint(HintNumber)
HintNumber = HintNumber - 1
End If
End Sub
上面的代码,先对 HintNumber 值进行判断,当 HintNumber 为 0 即程序的初始状态时,直接退出当前过程(Exit Sub 是退出当前过程的命令,切记);如果 HintNumber 不为 0 ,那么卸载索引值最高的信息菜单,即 MenuHint(HintNumber) ,然后讲算 HintNumber -1 并将结果赋给新的 HintNumber ,并最后退出条件判断。
6、“清除信息”菜单的“有效性”:
如果程序处于初始状态,即“信息菜单”的索引值为 0 ,那么“清除信息”命令无效,否则有效。由于只有先点击“帮助菜单(MenuHelp)”才能弹出“清除信息菜单(MenuClear)”,所以可以在 MenuHelp 的点击事件中输入以下代码:
Private Sub MenuHelp_Click()
If HintNumber = 0 Then
MenuClear.Enabled = False
Else
MenuClear.Enabled = True
End If
End Sub
7、测试:
按键盘上的 F5 键,对程序进行最终的测试。
三、提醒:
本节最重要的是掌握诸如 HintNumber 这种辅助变量,它将鼠标的点击动作用数字的形式加以诠释,通过值的加减来完成菜单的动态增加与清除。
这种辅助变量的使用,在 VB 中几乎是无处不在的,如前面我们在讲 For……Next……的语法时说的作为累加器的变量。
另外,从上面的例子我们可以看出, Load/Unload 不仅适用于窗体的装入与卸载,同时还适用于菜单的装入与卸载。
在前面的教程中,我们讲到了窗体的主要属性与事件,而本节我们主要讲述窗体的一些窗口运用。本节知识对于后面“多文档文件”的创建非常重要,所以希望大家好好掌握。
一、添加窗体:
在 VB 中每创建一个新文件,自动会生成一个新窗体,如果想在本窗体的基础上再添加一个窗体,那么应该如何做呢?
1、选择工程/添加窗体命令,弹出如图一的窗口:

图一
2、选择你需要的窗体,然后点按“打开”就行了,结果可以在“工程”窗口中看到,如图二:

图二
二、清除窗体:
在“工程”窗口中选中欲被清除的窗体,然后鼠标右键,在弹出的菜单中选择“移除……”命令。如图三:

图三
三、窗体的显示属性:
多窗口文件,往往是启动时打开主窗口,通过一些命令再打开其他窗口,那么,如何对窗口是否显示进行设置呢?
1、选择“工程/工程属性”菜单命令,在弹出的窗口中找到“启动对象”,然后从中选择文件打开时的主窗口是哪个,如图四:

图四
2、其他窗体的载入:
我们可以在主窗口中设置菜单或按钮,并在该菜单或按钮的代码区输入如下代码:
Form2.Show 1
其中,Show 是显示窗体的一种方法,1 是窗体的显示模式即 Mode ,当值为 0 即非模态窗体时(常态窗口),允许用户在当前程序中切换到其他窗口;当值为 1 即模态窗体时,用户不能在各个窗口间切换。
3、窗体在程序中的三种状态:
未装入:窗体没进入程序,不占用程序资源,可以通过 Unload 方法卸载窗体。装入但不显示:可以用 Load 方法将窗体载入内存,随时准备显示。
显示:用 Show 方法可以显示窗体,如果窗体已装入内存,那么直接 Show ;如果窗体还没装入内存,Show 可以先用 Load 的方法将窗体载入内存,然后再显示出来。
载入窗体:Load FormX
卸载窗体:Unload FormX
显示窗体:FormX.Show Mode
Windows 中,文档分为单文档(SDI)和多文档(MDI)两种,如我们熟悉的“记事本”就是一个典型的单文档程序,它最明显的特点是一次只能打开一个文件,当新建一个文件时,当前文件自动被替换掉。
多文档界面,如 Word ,允许用户同时打开多个文件进行操作。在多文档界面中,有一个窗体叫做主窗体(又称为 MDI 窗体),其他窗体称为子窗体。子窗体始终处在主窗体内部,主窗体的位置移动会导致子窗体的位置发生相应变化。如图一:

图一
一、多文档程序的建立:
多文档程序至少有两个窗体,一个主窗体和一个子窗体或多个子窗体,主窗体是其他窗体的容器。
1、创建一个新工程,然后选择工程/工程属性菜单命令,加入如图二的主窗体:

图二
2、在“项目”窗口中双击 Form1 切换到 Form1 ,然后将其 MDIChild 属性设为 True ,如图三:

图三
3、按 F5 键运行程序,结果如图四:

图四
4、控制程序的打开状态:
如果要让程序打开时自动载入 Form1 窗口,那么在如图五的工程属性窗口中选择“启动对象”为 Form1 ;如果不想显示子窗体,那么只需在“启动对象”中选择 MDIForm1 就行了。

图五
5、子窗体的显示:
假设工程的启动对象为 MDIForm1 ,那么如何显示子窗体 Form1 呢?
可以在主窗体中加入菜单,或者直接用 Load 的方法,如下:
Private Sub MDIForm_Load()
Form1.Show 0
End Sub
这段代码将 Form1 显示出来,并呈非模态模式。
二、主窗体与子窗体的标题:
当主窗体与子窗体都呈显现状态时,把子窗体最大化,你会发现窗体的标题变成了主窗体标题加上子窗体标题,如图六:

图六
三、主窗体与子窗体的菜单:
在 VB 中,如果子窗体载入,那么主窗体的菜单将被子窗体的菜单替换;只有当主窗体中没有子窗体时才能显示主窗体的菜单,如图七、图八、图九、图十:

图七

图八

图九
 

 

附件
    关闭窗口
    打印文档