VB教程-窗体参考模板_第1页
VB教程-窗体参考模板_第2页
VB教程-窗体参考模板_第3页
VB教程-窗体参考模板_第4页
VB教程-窗体参考模板_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1/42第四章窗体 14.1窗体的结构 14.2窗体属性 14.2.1窗体基本属性 11.名称(Name) 12.AutoRedraw(自动重画) 23.BackColor(背景色)与ForeColor(前景色) 34.BorderStyle属性 55.Height(高度)、Width(宽度)、Top(顶部)与Left(左边距)属性 56.Caption标题属性 67.字型Font属性组 78.Enabled(允许)(逻辑值) 89.Visible(可见)属性(逻辑值) 84.2.2窗体其他常用属性 24.3窗体的主要事件 34.3.1Activate(活动事件)与Deactivate(非活动事件) 34.3.2Load(装入)与UnLoad(卸载)事件 34.3.3Click(单击)与DblClick(双击)事件 34.3.4Resize事件 54.4窗体控制 54.4.1装入或卸载窗体 54.4.2显示和隐藏窗体 54.4.3Cls方法 74.4.4Move方法 74.4.5TextHeight和TextWidth 84.4.6位置属性CurrentX和CurrentY 84.4.7窗体之间的数据存取 94.5基本的窗体操作 104.5.1添加窗体: 104.5.2移除(清除)窗体 104.5.3END语句 114.5.4多窗体的启动(显示)顺序 114.6多文档程序 144.6.1多文档程序的建立 154.6.2主窗体与子窗体的标题 164.6.3主窗体与子窗体的菜单 174.7窗体设计举例 17练习创建一个窗体 18第四章窗体[学习目标]学会在应用程序中通过编程来调用和卸载工程中的窗体。掌握有关窗体操作的语句和方法。理解区别Unload和Hide方法。了解启动窗体的概念。[学习重点]有关窗体操作的语句和方法。在VB中建立一个程序主要包括两部分工作,即:设计窗体和编写代码。前面已对窗体做了一个简单介绍,编写VB程序首先要根据需要创建一个良好的可视化界面,因此VB程序界面是由窗体(Form)和一些必要的控件元素(Control)构成的。由于VB属于面向对象编程,也可以将窗体、控件都称为对象。窗体是窗体设计器窗口的简称,是应用程序面向用户的最终窗口。窗体也是一种对象,由其属性定义外观,用方法定义其行为,通过事件设定与用户实现交互。因此,设计窗体也就是设计一个应用程序的操作界面。当启动一个新的工程文件时,VB自动创建一个带图标的新窗体,命名为“Form1”。窗体内带有网点(称为网格)的窗口,这就是用户的窗体,一般也是程序运行时的主窗口。重新对该窗体大小的调整及属性值设置等操作,称为定制窗体。对窗体、控件的定制,在设计期间称为设计时,程序运行期间称为运行时。4.1窗体的结构当启动一个标准EXE程序后,窗体设计器中会出现一个默认的窗体。可以发现它的外观大致与Windows中记事本窗口一样,其窗体右上角也有最小化、最大化、关闭三个按钮。如图4-1所示:图4-1系统控件菜单:Form1.ControlBox,点击“图标”它可以弹出控制菜单命令。标题栏:Form1.Caption,显示的窗口标题,如本例中的“Form1”。最小化按钮:Form1.MinButton。最大化按钮:Form1.MaxButton。4.2窗体属性窗体属性决定了窗体的外观,如大小、颜色和标题等。对窗体属性设置还可以改变窗体的结构。4.2.1窗体基本属性1.名称(Name)“名称”是任何对象(窗体、控件)都具有的标识名,在属性窗口定义对象(窗体、控件)名称,以便在程序中引用。对于任何一个可以在属性窗口设置其属性的对象,必须设置该属性的值。VB自动为每一个对象给定一个缺省值。窗体名称“Name”,是窗体的标识名,其属性的缺省值为FormX(X为编号,从1,2,…依次顺延)。对于给VB中所有对象(窗体、控件)“名称”命名,都应按如下规则:必须以字母或汉字开头;可包括字母、数字和下划线,不能有空格或标点符号;最大长度为40个字符;不能使用与公共对象相同的名字,例如Clipboard、Screen或App。虽然窗体名称命名可以是一个关键字、属性名字、或别的对象的名字,但这会在代码中产生冲突,因此不要使用。“名称”只具有只读属性,它只能在程序设计阶段设置,不能在运行期间改变。名称不会显示在窗体上。在简单的程序里,给创建的对象命名不是很必要,可以直接使用VB为每一个对象给定的缺省值(默认名称)。但在有几十个对象(控件)的复杂窗体里,使用对象的缺省值,会让你用更多的时间去区分它们是那类控件。为了能见名知意,提高程序可读性,VB推荐由三个小写字母的前缀和一个以第一个字母为大写的描述性单词组成的名字。推荐的前缀见下表:对象前缀例子窗体(Form)frm FrmFirst确认框(CheckBox)chkChk1组合框(ComboBox)cboCbo1命令钮(CommandButton)cmdCmdExit数据库控件(DataControl)datDat1目录列表框(DirectoryListBox)dirDirTree驱动器列表框(DriveListBox)drvDrvDisk文件列表框(FileListBox)filFilDocuments框架(Frame)fraFraButtons水平滚动条(HorizontalScrollBar)hsbHsbScroll图形(Image)imgImg1标签(Label)lbl Lbl1线(Line)linLin1列表框(ListBox)lstLst1菜单(Menu) mnuMnu1选项钮(OptionButton)optOptButton1图片框(PictureBox)picPic1几何图形(Shape)shpShp1文本框(TextBox)txtTxt1垂直滚动条(VerticalScrollBar)vsbVsbScroll2.AutoRedraw(自动重画)该属性决定窗体被隐藏或被另一窗口覆盖之后,是否重新还原该窗体被隐藏或覆盖以前的画面。即是否重画如Circle、Line、Pset和Print等方法的输出。该属性可以通过属性窗口设置如图4-2所示,其属性值为True时,可以重新还原该窗体以前的画面;若为False时,则不重新还原。默认属性为False。常用于多窗体程序设计中。该属性的设置也可以在运行时通过代码进行设置,语句格式为:窗体名称.AutoRedraw[=Boolean]图4-2 例如:有两个窗体Form1和Form2,先加载窗体Form1会在窗体中央画许多同心圆,单击窗体Form1会显示窗体Form2,当单击窗体Form2时卸载窗体Form2,观察窗体Form1上画的许多同心圆有无改变。程序如下:PrivateSubForm_Click()'窗体1程序Form2.ShowEndSubPrivateSubForm_load() '窗体中央画许多同心圆Form1.ShowDimX,Y,R,LScaleMode=3 '以像素为单位X=Form1.ScaleWidth/2 'X位置Y=Form1.ScaleHeight/2'Y位置IfX>YThenL=YElseL=XForR=0ToL '半径Circle(X,Y),R,RGB(Rnd*255,Rnd*255,Rnd*255)NextREndSubPrivateSubForm_Load()'窗体中央画许多同心圆Form1.ShowDimRForR=0To10'半径Print"sssssssssssssssssssssssssssssssssss"NextREndSub'窗体2程序PrivateSubForm_click()UnloadForm2 '卸载窗体EndSub 注:ScaleWidth和ScaleHeight属性返回或设置“对象”(此例题“对象”是窗体)内部的水平或垂直度量单位。ScaleMode属性,返回或设置使用图形方法或调整控件位置时一个值,该值指示对象坐标的度量单位。3.BackColor(背景色)与ForeColor(前景色)BackColor属性用于设置窗体的背景颜色,如图4-3所示;ForeColor属性用于设置在窗体里显示的图片或文本的颜色,即用来指定图形或文本的前景色,如图4-4所示。图4-3图4-4它们用十六进制数指定颜色,在语句中颜色的表现形式为:&HBBGGRR&说明:它们用十六进制数指定颜色,在语句中颜色的表现形式为:&HBBGGRR&。BB指定蓝颜色的值,GG指定绿颜色的值,RR指定红颜色的值。每个数段都是两位十六进制数,即从00到FF。在程序代码中可以用Windows运行环境的红-绿-蓝(RGB)颜色方案,使用调色板或在代码中使用RGB或QBColor函数指定标准RGB颜色。RGB函数是用来指定颜色,多数情况下用十六进制数指定颜色,分别定义了红、绿、蓝三种颜色的值。红、绿、蓝三种成分都是用0到255(&HFF)之间的数表示。因此,可以用十六进制数按照下述语法来指定颜色,即&HBBGGRR&。例如:将窗体Form1的背景色设置为红色,则可使用下面四种方法:Form1.BackColor=RGB(255,0,0)'RGB函数Form1.BackColor=&HFF&'用十六进制数指定颜色Form1.BackColor=QBColor(12)'QBColor()函数Form1.BackColor=vbRed'VB提供的颜色常数QBColor函数返回一个Long数据类型,用来表示所对应颜色值的RGB颜色码。语句格式为:QBColor(color)说明:color参数代表使用于早期版本的Basic(如MicrosoftVisualBasicforMS-DOS以及BasicCompiler)的颜色值。QBColor函数返回值指定了红、绿、蓝三原色的值,用于设置成VBA中RGB系统的对应颜色。color参数是一个界于0到15的整型。color参数设置值见下表:值颜色值颜色0黑色8灰色1兰色9亮兰色2绿色10亮绿色3青色11亮青色4红色12亮红色5洋红色13亮洋红色6黄色14亮黄色7白色15亮白色例如:在窗体上添加一个文本框和一个命令按钮,每单击一次命令按钮,则文本框内字体颜色就变化一次(利用QBColor函数实现)。PrivateSubCommand1_Click()StaticiAsIntegerIfi<=15ThenText1.ForeColor=QBColor(i)Text1.FontSize=18Text1.FontBold=TrueText1.Text="color"EndIfIfi>16ThenEndi=i+1EndSub除了利用RGB和Qcolor函数来设置控件的颜色,还可以使用VB自身提供的Color常数来设置控件的颜色,这些常数可以在代码中的任何地方用下列常数代替实际值见下表:常数值描述vbBlack0x0黑色vbRed0xFF红色vbGreen0xFF00绿色vbYellow0xFFFF黄色vbBlue0xFF0000蓝色vbMagenta0xFF00FF紫红色vbCyan0xFFFF00青色vbWhite0xFFFFFF白色例如:将窗体Form1的背景色设置为红色,则可使用下面语句: Form1.BackColor=vbRed4.BorderStyle属性BorderStyle属性用于CONTROLInternet.HHCtrl.1CONTROLInternet.HHCtrl.1设置窗体的边框样式,通过改变BorderStyle属性设置,可以控制窗体如何调整大小。Form对象的BorderStyle属性设置值如下表所示:常数设置值描述vbBSNone0-None无边框;vbFixedSingle1-FixedSingle单线边框,不可以改变窗口大小;vbSizable2-Sizable(缺省值)双线边框,可以改变窗口大小;vbFixedDouble3-FixedDouble双线框架,不可以改变窗口大小;vbFixedToolWindow4-FixedToolWindow窗体外观与工具条相似。只有关闭按钮,不可以改变窗口大小;vbSizableToolWindow5-SizableToolWindow窗体外观与工具条相似。只有关闭按钮可以改变窗口大小。常与BorderStyle属性配合使用是ControlBox属性。5.Height(高度)、Width(宽度)、Top(顶部)与Left(左边距)属性这四个属性决定窗体(或控件)的大小,在容器中的位置,如图4-5所示:图4-5Height(高度)、Width(宽度)这两个属性用来指定窗体的高度与宽度(包括边框宽度和标题栏高度)。其度量单位是twip。(1twip=1/20点=1/1440英寸=1/567cm或大约等于1厘米的1/28)例如:要让窗体的宽度变为3000Twip,高度变为6000Twip,具体程序如下:PrivateSubForm1_load()Form1.Width=3000Form1.Height=6000EndSubTop(顶部)、Left(左边距)通过这两个属性可以控制窗体的坐标(左上角)位置。其度量单位是twip。(1twip=1/20点=1/1440英寸=1/567cm)。注意:随着对象的不同,这个Top与Left的意义不同。当对象是窗体时,Top指的是窗体顶部与屏幕顶部的相对距离,Left指的是窗体左边界与屏幕左边界的间距;当对象是其他控件时,它们分别表示控件顶部、左边与窗体顶部左边之间的距离。例如:把Form1窗体移动到距屏幕顶部200Twip,距屏幕左边距300Twip的地方,程序如下:PrivateSubForm_load()Form1.Top=200Form1.Left=300EndSub 例如:让窗体加载时,窗体的大小为屏幕的50%且居中显示,程序如下:PrivateSubForm_load()Form1.Width=Screen.Width*0.5Form1.Height=Screen.Height*0.5Form1.Left=(Screen.Width-Form1.Width)/2'居中显示Form1.Top=(Screen.Height-Form1.Height)/2EndSubScreen.Height属性是指屏幕的高度,即整个Windows桌面高度。Screen.Width属性是指屏幕的宽度,即整个Windows桌面宽度。6.Caption标题属性该属性用来设置对象上或标题栏上的显示内容,在外观上起到提示和标志的作用。当创建一个新窗体时,窗体的Caption标题属性值,为缺省的Name属性设置值,即Form1。标题可以通过属性窗口重新设置。例如:让窗体标题变为“test”,如图4-6所示:图4-6Caption属性可以在运行时中通过代码改变。语句格式为: [窗体.]Caption[=字符串]例如:让窗体的标题改变为"test",如图4-6所示。PrivateSubForm_Load()Form1.Caption="test"EndSub注意:Name属性与Caption属性的区别,两者虽然缺省值相同,都是Form1,但实际意义却不一样。Caption指的窗体标题栏上的文字,Name指这个窗体的对象名;也可以理解Name属性用于在代码中标识窗体、控件对象的名称(所有对象都具有的属性),供程序引用。Name属性在程序运行时不能改变;Caption属性是标题栏上的文字,在程序运行时可以通过程序代码改变。另外,对于窗体和所有有标题的控件,标题最长为255个字符;标签(Label)控件的标题长度没有字符数限制。7.字型Font属性组 字体属性用来设置输出字符的各种特性,包括字体、大小等,这些属性适用大部分控件。字体属性可以通过属性窗口设置,也可以在程序运行中通过代码改变。字体属性的设置操作及字型等概念与使用Word的设置字体格式基本一样。字体类型FontName属性是字符型,决定对象上正文的字体(缺省为宋体)。语句格式为: [窗体.]FontName[=字体类型] 例如:要在屏幕上显示的字体为“隶书”,具体程序如下:图4-7字体大小FontSize属性是整型,决定对象上正文的字体大小,语句格式为:[窗体.]FontSize[=字号]例如:Text1.FontSizet=20‘设置文本框中的字体大小粗体字FontBold属性是逻辑型,决定对象上正文是否是粗体,语句格式为:[窗体.]FontBold[=Boolean]'Boolean为逻辑值True(真)/False(假)PrivateSubForm_click()FontSize=16Form1.FontBold=True'让打印字体加粗Print"ffffffffff"EndSub斜体字FontItalic属性是逻辑型,决定对象上正文是否是斜体,语句格式为:[窗体.]FontItalic[=Boolean]加删除线字FontStrikeThru属性是逻辑型,决定对象上正文是否加一删除线。语句格式为:[窗体.]FontStrikeThru[=Boolean]加下划线字FontUnderLine属性是逻辑型,决定对象上正文是否带下划线。语句格式为: [窗体.]FontUnderLine[=Boolean]注意:如果省略对象名称,则指的是当前窗体;设置一种属性后,该属性立即生效,并且不会自动撤消,可在利用上述方法重新设置,才能改变该属性值。另外,某些对象中的属性是逻辑型的,改变其逻辑型的值,也可以利用下面的语句格式:[对象属性]= Not[对象属性]例如:要求每单击一次窗体就会让窗体上的字体由细变成加粗、加斜显示。如图4-8所示:PrivateSubForm_click()FontSize=16PrivateSubForm_click()FontSize=16Print"字体"FontBold=NotFontBold'逻辑开关语句FontItalic=NotFontItalicEndSub或利用条件语句进行判断,见下面程序:PrivateSubForm_click()FontSize=16Print"字体"IfFontBold=FalseAndFontItalic=FalseThenFontBold=TrueFontItalic=TrueElseFontBold=FalseFontItalic=FalseEndIfEndSub8.Enabled(允许)(逻辑值) 每个对象都有一个Enabled属性。该属性用来激活对象或禁止使用对象,即决定对象是否可操作。当一个对象的Enabled属性设置为True(真)时,允许用户进行操作,并对操作出响应(缺省值为True);当一个对象的Enabled属性设置为False(假)时,控件呈暗淡色,禁止用户进行操作。窗体Enabled属性决定运行时窗体是否响应用户事件。在程序运行时可以看到改变Enabled属性的效果。若Enabled已设为False,则点击按钮窗体不会有反应。该属性可以通过属性窗口设置,也可以在运行时通过代码进行设置,语句格式为:[窗体.]Enabled[=Boolean]9.Visible(可见)属性(逻辑值)当一个对象的Visible属性设置为False时,程序运行时不能看见;只有当Visible属性值变为True时,才能被看见。窗体Visible属性决定程序运行时窗体是否可见。当Visible为False时,窗体是不可见的,若值改为True,运行时窗体则可见。该属性可以通过属性窗口设置,也可以在运行时通过代码进行设置,语句格式为:[窗体.]Visible[=Boolean]例如:单击窗体,则隐藏窗体,单击窗体显示命令按钮。具体程序如下:PrivateSubForm_Click()Form1.Visible=False'隐藏窗体MsgBox"单击按钮,使窗体重现屏幕"'显示信息Form1.Visible=True'隐藏窗体EndSub例如:要求单击窗体1(隐藏窗体1),则显示窗体2,反之亦然。具体程序如下:'Form1的代码如下:PrivateSubForm_click()Form1.Visible=FalseForm2.ShowEndSub'Form2的代码如下:PrivateSubForm_click()Form2.Visible=FalseForm1.ShowEndSub例如:单击窗体上命令按钮,则命令按钮隐藏,单击窗体显示命令按钮。具体程序如下:PrivateSubCommand1_Click()Command1.Visible=FalseEndSubPrivateSubForm_Click()Command1.Visible=TrueEndSub4.2.2窗体其他常用属性1.MaxButton最大化按钮和MinButton最小化按钮设置值为Ture,有最大或最小化按钮,设置值为False则无。2.ControlBox控制菜单框属性若设置值为Ture,有控件菜单栏(图标);如设置为False,则无控件菜单(图标),同时窗体也无最大化按钮和最小化按钮,即使MaxButton属性和MinButton属性设置为Ture。另外,要使ControlBox属性有效,则BorderStyle属性值必须为1、2或3。3.Icon控制图标属性使用该属性返回或设置窗体左上角显示或最小化时显示的图标。该属性设置可以在设计时通过属性窗口加载指定图标,所加载的文件是图标(.ico)文件。如果不指定图标,窗体会使用VB缺省图标。该属性也可以在运行时通过代码进行设置,语句格式为:[窗体.]Icon例如:通过运行下面程序改变窗体上VB缺省图标。PrivateSubForm_Click()'"PLANE2.ICO"图标必须在c:\目录中,这个例子才能正常运行Form1.Icon=LoadPicture("c:\PLANE2.ICO")EndSub4.KeyPreview属性返回或设置一个值,以决定是否在控件的键盘事件之前激活窗体的键盘事件。设置值为False(缺省值),活动控件接收键盘事件,而窗体不接收;设置值为True,窗体先接收键盘事件,然后是活动控件接收事件。键盘事件为:KeyDown、KeyUp和KeyPress。当用程序代码设置时,语句格式为: [窗体.]KeyPreview[=Boolean]5.Picture图片属性设置窗体中要显示的图片。加载图片操作同Icon控制图标属性。WindowState属性设置一个窗体窗口运行时,窗体最小化、最大化和原形这三种可见状态。该属性设置可以在设计时由属性窗口设置,WindowState属性设置如下表:常数设置值含义vbNormal0-Normal(缺省值)正常窗口状态,有窗口边界;VbMinimized1-Minimized最小化状态,以图标方式运行;VbMaximized2-Maximized最大化状态,无边框,充满整个屏幕。WindowState属性设置也可以在运行时通过代码进行设置,语句格式为:[窗体.]WindowState=[常数或设置值]4.3窗体的主要事件4.3.1Activate(活动事件)与Deactivate(非活动事件)1.Activate事件:当对象窗体成为活动窗口时发生。2.Deactivate事件:当对象窗体成为非活动窗口时发生。当一个窗体启动(被加载)时,就发生Activate事件。当对多个窗体操作时,即从一个窗体切换到另一个窗体,每次切换一个窗体时,就发生Activate事件,而前一个窗体发生Deactivate事件。例如:通过运行下面程序体会Activate事件和Deactivate事件。'Form1程序PrivateSubForm_Deactivate()Print"欢迎学习、使用VisualBasic!"EndSubPrivateSubForm_click()Form2.ShowEndSub'Form2程序PrivateSubForm_Activate()Print"欢迎学习、使用VisualBasic!"EndSub4.3.2Load(装入)与UnLoad(卸载)事件1.Load(装入)事件Load事件常用在启动程序时,对控件属性和程序中所用变量进行初始化。Load事件的语句格式为:Load<窗体名称>注意:用Load语句只是把窗体装载到内存,该窗体不会自动成为可视窗体。此时若在对装载到内存中窗体上已存在的控件设置焦点,则会提示有错误,因此必须使用窗体的Show方法配合,让窗体为可视窗体。例如:执行下面程序观察窗体上的显示结果。PrivateSubForm_Load()'窗体装载DimxAsInteger,yAsIntegerx=10:y=15'Show'Command1.SetFocus'对Command1设置焦点'提示:实时错误5'无效的过程调用或参数Print"x+y=";x+yEndSub2.UnLoad(卸载)事件用Unload语句,其功能与Load语句相反,清除内存中指定的窗体。Unload事件的语句格式为:UnLoad<窗体名称>注意:窗体卸载后,如果要重新装入窗体,则新装入窗体上的所有控件都被重新初始化。4.3.3Click(单击)与DblClick(双击)事件这两个事件在单击或双击窗体(控件)时发生。Click事件Click事件是在一个对象上按下然后释放一个鼠标按钮时发生。它也会发生在一个控件的值改变时。对一个Form对象来说,该事件是在单击一个空白区或一个无效控件时发生。注意:用鼠标的左键或右键单击一个控件。对CheckBox,CommandButton,Listbox或OptionButton控件来说,Click事件仅当单击鼠标左键时发生。Click事件语句格式为:PrivateSubForm_Click()PrivateSubobject_Click([indexAsInteger])Click事件的语句包括下列部分:部分描述object一个对象表达式,其值是“应用于”列表中的一个对象。index一个整数,用来唯一地标识一个在控件数组中的控件。说明:通常,将一个Click事件过程附加到一个CommandButton控件,Menu对象或PictureBox控件上用来执行命令或类似命令的操作。对其它可应用的控件来说,使用这个事件来触发一个动作以响应控件中的变化。可用一个控件的Value属性从代码中测试该控件的状态。单击一个控件除了产生Click事件以外还可产生MouseDown和MouseUp事件。这三种事件发生的顺序根据控件的不同而不同。例如,对ListBox和CommandButton控件来说,这些事件按下列顺序发生:MouseDown、Click、MouseUp。但对FileListBox,Label或PictureBox控件来说,这些事件按下列顺序发生:MouseDown、MouseUp和Click。因此,当给这些相关的事件附加事件过程时,要确保它们的操作不互相冲突。如果在应用程序中事件发生的顺序是重要的,则应对控件事件发生的顺序进行测试,以确定控件事件的顺序。注意:不要在同一个控件上使用Click事件又使用DlbClick事件,这样会使程序的执行发生混乱,因为Click事件是两个事件中首先被触发的事件,其结果是鼠标单击被Click事件截断,从而使DblClick事件不会发生。例如:观察执行下面程序窗体Form1的DlbClick事件永远不会发生。PrivateSubForm_Click()HideForm2.ShowEndSubPrivateSubForm_DblClick()Print"欢迎学习、使用VisualBasic!"EndSubPrivateSubForm_Activate()Print"预祝大家取得优异成绩!"EndSubPrivateSubForm_Click()HideForm1.ShowEndSub2.DblClick事件对于窗体而言,当双击被禁用的控件或窗体的空白区域时,DblClick事件发生。对于控件而言,DblClick事件在以下情形下发生:用鼠标左键双击控件。双击Style属性设置为1(Simple)的ComboBox控件中的项目,或者在FileListBox、ListBox、DataCombo或DataList控件中的项目。Click事件语句格式为:PrivateSubForm_DblClick()PrivateSubobject_DblClick(indexAsInteger)部分描述object对象表达式,其值是“应用于”列表中的一个对象。index如果控件在控件数组内,则这个index值就用来标识该控件。说明:如果控件在一个控件数组内,则这个Index参数唯一地标识这个控件。可以使用DblClick事件过程执行一个隐式操作,如双击图标来打开一个窗口或文档。也可用这类过程执行单一操作的多个步骤,例如用双击在列表框中选定一项并关闭对话框。要在VB中产生这类快捷效果,可以使用带有缺省按钮的列表框的或叠层排列文件列表框的DblClick事件过程;所谓缺省按钮就是Default属性设置为True的CommandButton控件。作为列表框DblClick事件过程的一部分,只需简单调用缺省按钮的Click事件。4.3.4Resize事件Resize事件:当一个对象第一次显示或当一个对象的窗口状态改变时该事件发生。例如,一个窗体被最大化、最小化或被还原。此事件发生必须在ControlBox属性设置为Ture才有效。例如:通过运行下面程序改变窗体上VB缺省图标,具体程序如下:PrivateSubForm_Resize()IfForm1.WindowState=vbMinimizedThen'窗体最小化Form1.Icon=LoadPicture("C:\ProgramFiles\MicrosoftVisualStudio\COMMON\GRAPHICS\ICONS\INDUSTRY\ROCKET.ICO")'Form1.Icon=LoadPicture("c:\PLANE2.ICO")'"PLANE2.ICO"图标必须在c:\目录中,这个例子才能正常运行EndIfEndSub4.4窗体方法 在单窗体程序(又称为SDI窗体)设计中,所有的操作都是在一个窗体完成,不需要在多个窗体间切换。而在多窗体程序中,则需要装入、打开、关闭、隐藏或显示指定窗体等操作。窗体对象包含下列方法:Cls、Hide、PrintForm、Show、Move、Refresh、Print、SetFocus。其中两个最重要的窗体方法是Show和Hide方法。4.4.1Show方法和Hide方法显示窗体Show方法Show方法用于在屏幕上显示一个窗体,调用Show方法与设置窗体Visible属性为True具有相同的效果。如果要显示的窗体事先未装入,该方法会自动将窗体先装入内存再显示。语句格式为: [窗体名称.]show[模式]如果省略[窗体名称.]参数,则表示显示当前窗体;“模式”用来确定窗体的状态,其值有0和1:“0”表示“非模式型”(系统默认值),在此模式下,不但可以对本窗体进行操作,而且允许同时对其它窗体进行操作。“1”表示“模式型”,在此模式下,只有关闭本窗口后,才允许对其它窗体进行操作。例如:在Form2显示后,不将其关闭,后面的提示信息是不会显示出来。只有关闭了Form2时,Form1上才会显示"Test"信息。如图4-8:图4-8PrivateSubForm_Click()'窗体1程序调用窗体2(“模式型”)Form2.Show1'模式型Print"Test"EndSub若把上述程序中显示窗体2为“非模式型”,当单击Form1后,会立即将Form2显示出来并同时在Form1上显示"Test"信息。PrivateSubForm_Click()'窗体1程序调用窗体2(“非模式型”)Form2.Show0'非模式型Print"Test"EndSub注意:调用Show方法和将窗体的Visible属性设置为True效果是一样的。例如:把窗体的属性中将Visable属性设为False,运行下面程序,此时不会显示窗体。停止运行,在代码窗中相应位置输入“from1.show”再运行,看效果。具体程序如下:PrivateSubForm_Load()''Form1.Show'显示名为Form1窗体'Show'显示当前窗体Print"看效果"EndSub2.隐藏窗体用Hide方法,可以隐藏指定的窗体,即窗体不在屏幕上显示,但该窗体仍驻留在内存,因此,它与UnLoad语句的作用不一样。另外,当一个窗体从屏幕上隐去时,其Visible属性被设置成False,并且该窗体上的控件也变得不可访问,但对运行程序间的数据引用无影响。利用Hide方法会装入指定窗体,但并不显示。语句格式为:[窗体名称.]Hide如果省略[窗体名称.]参数,则表示隐藏当前窗体例如:Form1.Hide'使Form1窗体隐藏 Me.Hide'使当前窗体隐藏 Hide'使当前窗体隐藏例如:有两个窗体Form1、Form2,当单击窗体Form1时,窗体Form2显示,而窗体Form1隐藏;当单击显示窗体Form2时,窗体Form1显示,而窗体Form2隐藏。注意观察程序运行结果,具体程序如下:'Form1的代码如下:PrivateSubForm_click()Form2.ShowForm1.HideEndSub'Form2的代码如下:PrivateSubForm_click()Form1.ShowForm2.HideEndSub例如:实现将指定的窗体在屏幕上进行显示或隐藏的切换。为了实现这一功能,可以在窗体Forml的“代码”窗口中输入下列代码:PrivateSubForm_Click()Form1.Hide'隐藏窗体MsgBox"单击按钮,使窗体重现屏幕"'显示信息Form1.Show'重现窗体EndSub4.4.2Cls方法Cls方法用来清除清除运行时在窗体或图片框中显示的文本或图形。语句格式为:[窗体名称.]Cls说明:使用Cls方法后,图形坐标中两坐标轴的x与y值均被置为0;不能清除窗体在设计时添加的控件及用Picture属性装入的图形;“对象”选项省略时指窗体。注意:清屏后坐标当前回到原点,即对象的左上角0,0。4.4.3Move方法Move方法用于移动窗体或控件,并改变其大小。语句格式为:[对象.]Move<左边距离>[,上边距离[,宽度[,高度]]]说明:“对象”可以是除时钟、菜单外的所有控件,若省略“对象”,则默认“对象”为窗体。左边距离、上边距离、宽度、高度:数值表达式,以twip(缇)为单位。如果对象是窗体,则“距离”以屏幕为参照;若为“控件”,则以窗体为参照。如图4-9所示:图4-9例如:窗体的高度为3600缇,宽度为2900缇。运行后窗体位于屏幕中央;若单击窗体,窗体由上向下移动,当窗体距屏幕顶端距离加窗体高度大于屏幕高度,则窗体返回窗体初始位置Top=100、Left=100。请编写程序。PrivateSubform_Click()'手动Form1.MoveForm1.Left,Form1.Top+500IfForm1.Top+Form1.Height>Screen.HeightThenForm1.Left=100Form1.Top=100EndIfEndSubPrivateSubForm_Load()Form1.Height=3600Form1.Width=2900Form1.Left=(Screen.Width-Form1.Width)/2'窗体居中Form1.Top=(Screen.Height-Form1.Height)/2EndSub注:Height、Width属性指窗体的外部高度和宽度,包括边框和标题栏。例如:将图形控件移到窗体的中心,见图4-10。具体程序如下:PrivateSubForm_Click()Picture1.Move(Form1.ScaleWidth-Picture1.Width)/2,(Form1.ScaleHeight-Picture1.Height)/2EndSub图4-10例如:窗体设计见图4-11,编写程序实现窗体上相应按钮功能,具体程序如下:Dimstep1AsIntegerPrivateSubCommand3_Click()step1=1Timer1.Interval=0EndSubPrivateSubCommand4_Click()EndEndSubPrivateSubForm_Load()step1=1Timer1.Interval=0EndSubPrivateSubCommand2_Click()'手动Timer1.Interval=0CallMyMoveEndSubPrivateSubCommand1_Click()'自动Timer1.Interval=200EndSubPrivateSubTimer1_Timer()StaticFlagAsBooleanIfFlagThenLabel1.ForeColor=&HFF0000ElseLabel1.ForeColor=&HFFFlag=NotFlagCallMyMoveEndSubPublicSubMyMove()Label1.MoveLabel1.Left+50*step1IfLabel1.Left>Form1.WidthThenstep1=-1ElseIfLabel1.Left<0Thenstep1=1EndIfEndSub图4-114.4.4TextHeight和TextWidthTextHeight和TextWidth方法,用以返回按Form、PictureBox或Printer的当前字体将被打印的文本字符串的高度和宽度。语句格式为:[对象.]TextWidth(字符串)[对象.]TextWidth(字符串) 这两个方法常与位置属性CurrentX、CurrentY属性配合使用。4.4.5位置属性CurrentX和CurrentY位置属性CurrentX和Current常用来把文本精确地输出到窗体、图片框或打印页上。这两个属性分别表示当前输出位置的横坐标与纵坐标。设计时不可用。语法格式为:[对象.]CurrentX[=x][对象.]CurrentY[=y]说明: 若[对象]是窗体,则窗体位置使用的是绝对坐标,以屏幕为参考点,X、Y分别表示为水平和垂直坐标的数值。使用时[对象]可以省略,默认为当前窗体。 若[对象]是控件,则控件位置使用的是相对坐标,以窗体为参考点,X、Y分别表示为水平和垂直坐标的数值。使用时[对象]不可以省略。注意:坐标从对象的左上角开始测量。在对象的左边CurrentX属性值为0,上边的CurrentY为0。坐标以缇为单位表示,或以对象的ScaleHeight、ScaleWidth、ScaleLeft、ScaleTop和ScaleMode属性定义的度量单位来表示。例如:使字符串“快速进入VisualBasic的主题”相对于窗体居中显示,程序如下:PrivateSubForm_Click()DimbAsString,x,yFontSize=16str1="快速进入VisualBasic的主题"x=(ScaleWidth-TextWidth(str1))/2y=(ScaleHeight-TextHeight(str1))/2CurrentX=xCurrentY=yPrintstr1EndSub例如:将图片框相对于窗体居中显示,图片框中的文字居中显示。程序如下:PrivateSubForm_Click()Dimstr1AsStringstr1="图片框相对窗体、文字相对图片框居中显示"Picture1.FontName="宋体"'图片框中文字的字体Picture1.FontSize=16'图片框中文字的字号Picture1.Left=(ScaleWidth-Picture1.Width)/2'图片框水平位置Picture1.Top=(ScaleHeight-Picture1.Height)/2'图片框垂直位置Picture1.CurrentX=Picture1.ScaleLeft+Picture1.Width/2-Picture1.TextWidth(str1)/2'输出水平位置Picture1.CurrentY=Picture1.ScaleTop+Picture1.Height/2-Picture1.TextHeight(str1)/2'输出垂直位置Picture1.Printstr1'在图片框中输出字符串str1EndSub各对象的其他参数保持默认值。程序设计时和运行结果见图4-2。无论怎样调整窗体,只要单击窗体,都会按题目要求调整图片框和文本的位置。TextWidth()为求文本宽度的函数。4.4.7窗体之间的数据存取存取控件的属性存取控件的属性的语句格式为:[另一窗体名称.]控件名.属性例如:把窗体Form2中时间控件Timer1的Enabled属性设置值,赋给窗体Form1中时间控件Timer1的Enabled属性,也可以赋给窗体Form1的Enabled属性,代码如下: Timer1.Enabled=Form2.Timer1.EnabledForm1.Enabled=Form2.Timer1.EnabledCommand1.Visible=Form2.Visible存取变量的值存取变量的值的语句格式为:[另一窗体名称.]全局变量名 例如:把窗体Form1中变量的值,赋给窗体Form2中的变量并分别在文本框Text(1-4)内显示。'Form1中程序代码如下:OptionExplicitPublichjAsInteger,bbAsInteger,ss1AsInteger'全局变量PrivateSubForm_Load()hj=30bb=20ss1=90EndSubPrivateSubForm_Click()Form1.HideForm2.ShowForm2.hj=Form1.hjForm2.bb=Form1.bbForm2.ss1=Form1.ss1EndSub'Form2中程序代码如下:OptionExplicitPublichjAsInteger,bbAsInteger,ss1AsInteger'hj、bb、ss1要声明为全局变量,变量名可以与Form1中变量相同或不同,但个数要相同。PrivateSubForm_click()Form2.Text2.Text=CStr(hj)Form2.Text1.Text=CStr(bb)Form2.Text3.Text=CStr(93-bb)Form2.Text4.Text=CStr(ss1)EndSub注意:一定要把不同窗体上需要传递数据的变量声明为“全局变量”4.5基本的窗体操作4.5.1添加窗体:在VB中每创建一个新文件,自动会生成一个新窗体,如果想在本窗体的基础上再添加一个窗体,那么应该如何做呢?添加窗体添加窗体有三种方法:单击菜单栏“工程”→“添加窗体”命令;单击工具栏上添加窗体图标;在“工程”窗口中按鼠标右键。上述三种方法都将弹出添加窗体对话框窗口,如图4-10所示:图4-10选择你需要的窗体(最常选用的就是“窗体”),然后点按“打开”就行了,结果可以在“工程”窗口中看到,如图4-11所示:图4-114.5.2移除(清除)窗体移除(清除)窗体的有两种方法:在“工程”窗口中选中欲被移除的窗体,单击菜单栏“工程”→“移除”窗体命令;在“工程”窗口中选中欲被移除的窗体,然后鼠标右键,在弹出的菜单中选择“移除”命令。如图4-12所示:图4-124.5.3END语句END语句的功能是终止应用程序的执行,并从内存卸在所有窗体。End语句的语法有以下几种形式,见下表:语句含义End停止执行。不是必要的,可以放在过程中的任何位置关闭代码执行、关闭以Open语句打开的文件并清除变量。EndFunction必要的,用于结束一个Function语句。EndIf必要的,用于结束一个If…Then…Else语句块。EndProperty必要的,用于结束一个PropertyLet、PropertyGet、或PropertySet过程。EndSelect必要的,用于结束一个SelectCase语句。EndSub必要的,用于结束一个Sub语句。EndType必要的,用于结束一个用户定义类型的定义(Type语句)。EndWith必要的,用于结束一个With语句。说明:在执行时,End语句会重置所有模块级别变量和所有模块的静态局部变量。若要保留这些变量的值,改为使用Stop语句,则可以在保留这些变量值的基础上恢复执行。End语句提供了一种强迫中止程序的方法。VB程序正常结束应该卸载所有的窗体。只要没有其它程序引用该程序公共类模块创建的对象并无代码执行,程序将立即关闭。End语句不调用Unload、QueryUnload、或Terminate事件或任何其它VB代码,只是生硬地终止代码执行。窗体和类模块中的Unload、QueryUnload、和Terminate事件代码未被执行。类模块创建的对象被破坏,由Open语句打开的文件被关闭,并且释放程序所占用的内存。其它程序的对象引用无效。例如:设计一个包含两个窗体Form1和Form2的多窗体应用程序。Form1为启动窗体,单击Form1,隐藏Form1,显示Form2;单击Form2时,隐藏Form2,显示Form1。在工程文件中添加两个窗体,名称分别为Form1和Form2。'Form1的代码如下:PrivateSubForm_Click()Form2.ShowForm1.HideEndSub'Form2的代码如下:PrivateSubForm_Click()Form1.ShowForm2.HideEndSub4.5.4多窗体的启动(显示)顺序指定启动窗体在缺省情况下当程序设计中包括多个窗体文件,如果不是指定哪个窗体先启动,则默认第一个创建的窗体为启动窗体,如果要使用其它对象作为工程的启动窗体,可以通过“工程”菜单的“工程属性”对话框进行“启动对象”的设置。具体操作步骤如下:选择“工程→工程属性”菜单命令,弹出“工程属性”对话框窗口;单击“启动对象(s)”右边下拉按钮,进行相应窗体选择,如图4-13所示。图4-13单击“确定”按钮没有启动窗体时的启动有时候在启动应用程序时不加载任何窗体,而是在进行某些操作后,在加载窗体。要做到这一点,需要做两步工作:在标准模块中创建一个名为Main的子过程首先创建标准模块,单击“工程→添加模块”命令。打开标准模块代码窗口输入程序代码,如下面的例子所示,通过输入一个数值决定启动哪一个窗体。原程序SubMain()DimxAsIntegerx=InputBox("请选择启动窗体:1.Form2、2.Form2")Ifx=1ThenForm1.ShowElseForm2.ShowEndIfEndSub将SubMain过程设为启动对象单击菜单栏“工程”项,选取“工程属性”,在弹出“工程属性”对话框的“通用”项内,从“启动对象”框中选定“SubMain”。显示启动时的快速显示如果启动时有一个较长的执行过程,如要从数据库中装入大量数据或者要装入一些大型位图,这时可能希望在启动时给出一个快速显示。快速显示是一种窗体,它通常显示的是诸如应用程序名,版权信息和一个简单的位图等内容。启动VisualBasic时所显示的屏幕就是一个快速显示。要显示快速显示,需用SubMain过程作为启动对象,并用Show方法显示该窗体:原程序OptionExplicitSubmain()'标准模块DimintStatusAsIntegerfrmSplash.ShowEndSubPrivateSubForm_Load()'第一启动画面'Major该主要版本号、Minor该工程的小版本号、Revision该工程的修订版本号lblVersion.Caption="版本"&App.Major&"."&App.Minor&"."&App.RevisionlblProductName.Caption=App.Title'设置应用程序的标题lblWarning.Caption="程序加载中,请稍后!!!"EndSubPrivateSubTimer1_Timer()frmLogin.ShowUnloadMeEndSubPrivateSubcmdCancel_Click()'第二启动画面Me.Hide endEndSubPrivateSubcmdOK_Click()'检查正确的密码IftxtPassword="password"Then'将代码放在这里传递'成功到calling函数'设置全局变量时最容易的Me.HideForm1.showElseMsgBox"无效的密码,请重试!",,"登录"txtPassword.SetFocusSendKeys"{Home}+{End}"'选中刚才输入错的密码EndIfEndSub当一些启动例程正在执行时,快速显示能吸引用户的注意,造成应用程序装载很快的错觉。当这些启动例程完成以时,可以装入第一个窗体并使快速显示卸载。对于快速显示的设计来说,尽量简单为好。如果使用大量位图或者大量控件,则快速显示本身装入将会变慢。注:SendKeys语句将一个或多个按键消息发送到活动窗口,就如同在键盘上进行输入一样。结束应用程序当所有窗体都已关闭并且没有代码正在执行时,事件驱动的应用程序就停止运行。如果最后一个可见窗体关闭时仍有隐藏窗体存在,那么应用程序表现为已经结束了(因为没有可见的窗体),可实际上应用程序仍在运行,直到所有隐藏窗体都关闭为止。为了避免出现关闭应用程序时的这类问题,最好的办法是确保所有的窗体都已卸载。如果有一个以上窗体,可以使用Forms集合和Unload语句。例如:在主窗体上可以用一个名为cmdQuit的命令按钮用于退出程序。如果应用程序只有一个窗体,则Click事件过程可简单为:PrivateSubcmdQuit_Click()UnloadMeEndSub如果应用程序使用多窗体,通过把代码放入主窗体的Unload事件过程可以卸载这些窗体。可以使用Forms集合确保找到并关闭所有窗体。下列代码就是使用窗体集合来卸

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论