第2章VB窗体和常用控件 2.1基本要求 1.掌握VB窗体常用属性,事件和方法的使用: 2.掌握建立一个VB应用程序的方法和操作步骤: 3.掌握对象属性值的设置方法: 4.掌握标签控件、命令按钮控件、文体框控件的常用属性,事件和方法的使用。 2.2知识点 1.类 类是创建对象实例的模板,是同种对象的集合与抽象,包含了创建对象的属性描述和行 为特征的定义。 2.对象 对象是类的一个实例,它继承了类的属性、方法。 3.对象的建立 (1)窗体对象的建立:选择“工程”菜单中的“添加窗体”命令。 (2)控件对象的建立:双击工具箱中控件对象按钮或单击后在窗体上拖动鼠标。 4.对象的三个要素: (1)属性:是用来描述和反映对象特征的参数,对象中的数据保存在属性中。不同的 对象具有各自不同的属性。对象属性的设置方法有两种:在设计阶段用属性窗口设置:在程 序代码中通过赋值来设置。 (2)事件:响应对象的动作称为事件,它发生在用户与应用程序交互时。 (3)方法:方法就是VB为程序设计人员提供的一种特殊的过程和函数,用户可直接 调用方法而完成某一个功能。对象方法的调用格式为:[对象]方法[参数名表] 5.窗体 (1)窗体的属性 Name(名称):窗体名称,当使用窗体对象时必须要用该名称来标识窗体。 Caption属性:决定窗体标题栏中的内容。 Forecolor属性:决定窗体的前景颜色(即窗体上正文的颜色)。 Backcolor属性:决定窗体的背景颜色。 MaxButton属性:最大化按钮属性,为True时,窗体右上角有最大化按钮,为False时 则无最大化按钮。 MinButton属性:最小化按钮属性,为True时,窗体右上角有最小化按钮,为False时 则无最小化按钮。 Icon属性:决定窗体最小化时的图标。 ControlBox属性:决定窗体左上角是否有控制莱单框。 Picture属性:决定窗体背景中要显示的图形。 BorderStyle属性:决定窗体的边框样式。 VindowsState属性:决定窗体执行时以什么状态显示。 Font属性:决定窗体文本的外观
! "#$%&'()$%*+$ , -./0123 .456789 :;? @ABCD, .-01 EFGabABcd Rdefg[R,h4 Wijkh4, ! il5J[ mnop ![ qrRstu` !, HI Jv^w@ Exy[z8{|}, HI J ~. @ m5Atd z , @J cd HI wJw }w`", JC"R, JC ¡¢\£* ¡, JC¤ ¡, J¥¦§() @ } ¨\©i¥¦§() @ ! } ª«¥¦§(), J¥¬§() @ } ¨\©i¥¬§() @ ! } ª«¥¬§(), " JC¥¬§}", JC®\©.¯i$°PQ+, # JC¤R±²³, $%& JC´+µ, '$(!% JC¶?}·¸¹º»±², JC*¼½¾,
(2)窗体的事件 Load事件:当装入窗体时激发,通常用于对属性和变量初始化。 Click事件:当单击窗体时,就会激发该事件。 DbIClick事件:当双击窗体时,就会激发该事件。 Activate事件:当一个窗体被激活时会发生该事件。 (3)窗体的方法 Print方法:在对象上输出信息。其形式:[对象]Print[表达式列表] Cs方法:清除运行时在窗体中显示的文本或图形,不清除窗体在设计时的文本和图形。 形式:[对象].Cs Move方法:改变窗体的位置。 6.标签框对象(Label) 用于显示或输出文本信息,不能作为输入信息的界面。 (1)主要属性 Name(名称):设置名称的属性 Caption::设置标题的属性 Height、.Width、Top、Left:设置大小、位置的属性 Enabled:设置标签框是否可操作的属性 Visible:设置程序运行时标签框是否可见的属性 Font:设置标签框上文本的字 体、大小等属性 BorderStyle设置标签框边框样式的属性 ForeColor设置标签框文本颜色的属性 Backcolor设置标签框背景颜色的属性 Alignmemt设置标签框上文本对齐方式的属性。 (2)事件:单击(Click)双击(Dblclick)改变(Change) 7.命令按钮(CommandButton) 用于接受用户输入的命令。输入命令可以有三种方式:鼠标单击、Tb键焦点到该按钮、 快捷键。 (1)主要属性 Name(名称):设置名称的属性 Caption::设置标题的属性 Height、Width、Top、Left:设置大小、位置的属性 Enabled:设置命令按钮是否可操作的属性 Visible:设置程序运行时命令按钮是否可见的属性 Font:设置命令按钮上文本的字体、大小等属性 Style:用来决定命令按钮的标题中是否可以使用图形 Picture:选择命令按钮上的图形文件 ToolTipText:设置命令按钮的提示信息 (2)常用事件:Click、LostFocus、GotFocus、Mouseup、MouseDown 8.文本框(TextBox) 文本框是一个文本编辑区域,可在该区域输入,编辑和显示正文内容
HI ) $ J¿À}Áx sÂÃÄÅƧ, JQV} ~ÇÁx , *+ JUV} ~ÇÁx , ,- JÈÁÉ}Çxy , HI # J[\ÊËÌÍ,γJ # ÏÐ ! JÑÒÓ?}[R±²*¼Y³ hÑÒ[ m}*¼³, ³J ! - JÔÃÕ!, ±²YÊË*¼ÌÍ h@ÊÀÌÍÖ×, HIØ HwIJ !w J !" ./0%'$0% %)1J !¦¬%Õ! 2 +$J !"#+.¯ !+J !Ó?}"#+.¯ Ù J !"#+\*¼Ú %¦¬Û $%& !"#+´+µ !"#+*¼ ¡ !"#+¤ ¡ ,/ !"#+\*¼Ü , HI JQVHI UVH*+IÔÃH0 /I ÂÝzÊÀ&',ÊÀ&' ·iÞ5 J_"QV% + ßàáâ()% ãäß, HIØ HwIJ !w J !" ./0%'$0% %)1J !¦¬%Õ! 2 +$J !&'().¯ !+J !Ó?}&'().¯ Ù J !&'()\*¼Ú%¦¬Û %&J`C&'()"R.¯ ·³ #JKL&'()\³* J !&'()²ÌÍ HI J%)!!%3!%!% !*( *¼+.*¼åæçè [çèÊÀ åæ±²£*,
(1)主要属性 Name(名称):设置名称的属性 Text:存放文本框中显示的正文内容 Height、Width、Top、Left:设置大小、位置的属性 Enabled:设置文本框是否可操作的属性 Visible:设置程序运行时文本框是否可见的属性 Fot:设置文本框上文本的字体、大小等属性 Maxlength:决定文本框上能够输入正文的最大长度 PasswordChar:决定是否在文本框中显示用户输入的字符 Locked:决定文本框是否可以被编辑 MultiLine:决定文本框是否可以接受多行文本 Scrollbars属性:决定文本框是否加滚动条 (2)常用事件:Click、DbIClick、Change、eypress、LostFocus (3)常用方法:SetFocus 2.3疑难解析 1.使用L0ad语句加载窗体,窗体不显示? Load语句将窗体装入内存并设置窗体的Visible属性为False(无论在设计时如何设置 Visible属性),此时可以引用窗体中的控件及各种属性。为了使窗体可见,在用Load语句 后,再将窗体的Visible属性设置为True,或使用Show方法加载窗体。 2.在Form Load事件中,SetFocus方法不起作用? 与系统在窗体装载入内存时无法同步地调用窗体的Prit方法输出一样,也无法调用 SetFocus方法来定位控件的焦点。解决方法是在属性窗口对要定位焦点的控件的TabIndex 属性值设为0即可。 3.程序运行时,对多个文本框间焦点移动的问题? 方法一:按Tb键,不必编写代码,直接利用系统提供的功能方便地在各控件之间移动。 方法二:按Enter键,并且编写下列事件过程代码: Private Sub Textl KeyPress(KeyAscii As Integer) If KeyAscii=13 Then text2.SetFocus End If End Sub 4.数据合法性检查中引起程序的死循环? 在数据输入时,经常需要对输入的数据做合法性检查,以确保程序运行的正确性。如: 对输入的成绩数据要求是数字,否则删除原输入的内容,并将焦点仍定位于该文本框。例如, 下面有一个要实现成绩输入的简单程序,语文成绩输入至文本框text1,数学成绩输入至文 本框text2,程序界面如图2-1所示
HIØ HwIJ !w Jgé*¼+R±²£* ./0%'$0% %)1J !¦¬%Õ! 2 +$J !*¼+.¯ !+J !Ó?}*¼+.¯ Ù J !*¼+\*¼Ú%¦¬Û /0JC*¼+\êÊÀ£*¥¦ëì # !!($0 JC.¯[*¼+R±²zÊÀÚí )$JC*¼+.¯ ·Èåæ )JC*¼+.¯ ·Ýî?*¼ %+ ! JC*¼+.¯Tï^ð HI J%*+%0 /%&!!%)!! HI J%! !" ) $ ñòó¿Àgô ! !+ @ !H«õ[ m}ö÷ ! !+ I ø} ·ùR$új5,@&?),-@AB [deÊÀ} ÊÀde7 ·fÓ?£,öJ ÊÀde.dÚ ¯ªÒÊÀ ôóàáCÕÂ*¼+,1ö ×i0ÊÀQ ñ*ÊÀ*¼+ dÊÀ* ¼+ Ö×ö 8 ²,
语文: 数学: 图2-1程序界面 要实现合法性检查功能,分别在Textl_LostFocus、Text2_LostFocus事件过程中编写如 下代码: Private Sub Text1 LostFocus() If Not IsNumeric(Text1.Text)Then Text1.Text="M Text1.SetFocus End If End Sub Private Sub Text2 LostFocus() If Not IsNumeric(Text2.Text)Then Text2.Text="M Text2.SetFocus End If End Sub 程序运行时,当在语文成绩框Textl中输入非数字字符时,焦点在数学成绩框Text2中 不停地闪动,程序产生死循环。这是因为:当Txtl输入结束,鼠标单击Text2时,激发了 Textl_LostFocus事件,焦点到达Text2:但由于这时Textl中的数据是非数字的,必然会调 用Textl.SetFocus方法,使焦点从Text2回到Textl::而又激发了Text2 LostFocus事件,此 时,Text2中还未输入任何数据,IsNumeric(Text2.Text)值为False,必然会调用Text2.SetFocus 方法,使焦点从Textl回到Text2,如此就产生了死循环。 通过分析,只要Text2有默认值就不会产生死循环,因此解决Txtl输入错时产生死循 环的方法是,把Private Sub Text2 LostFocus()事件过程中If的条件表达式改为:If Text2.Text>"And Not IsNumeric(Text2.Text)Then即可。 5.如何声明局部变量和窗体级变量,它们有何区别? 在VB程序中,除了大量的控件对象外,还要使用一些变量,暂时存放一些中是结果。 这些变量的声明可以放在过程外的“通用声明”段,称为窗体级变量:也可以放在过程中, 称为局部变量。初学者往往对一个变量应该声明为局部变量还是窗体级变量,感觉难以确定。 其实,只要弄清楚它们的区别,就容易把握了。 局部变量和窗体级变量的区别: 窗体级变量在本窗体的所有过程中均可使用:而局部变量仅在变量声明所在的过程中可 使用,也即随着本过程的执行而分配到存储空间,当执行到End Sub语句,分配的内存空间 被回收,变量的值也就丢失。 2.4典型例题 例2】在窗体上,生成一个文本框,名称使用默认值,在属性窗口中将Txt属性设置
8 Ö× 07 [ 5)!!% 5)!! tRåö qrJ #- %+ 5)!! "1"! 0 799 %! 2$"1 2$%+ #- %+ 5)!! "1"! 0 799 %! 2$"1 2$%+ Ó?} [ñ*+ RÊÀdÚÚí} àá[d+ R h !^ "y#$%,&.'@J ÊÀ() _"QV } ÁxÃÄ ·é[tR w@?@ÃÄ,ÅABBÃÄÃÄ CDE·C, Î0 4FÑGEHç ~I8ÃÄçJ >ÃÄ[¼itRJ ?@ÃÄK[ÃÄ<=[tR ¢LM¼t¶?NâgOP ¶?â 2$%+ ñò NgP È.Q ÃÄ~RS, 1 8 [\ y*¼+ w56 [pRó !
为“选定此文本框的部分内容”。编写代码实现选定文本框中部分内容的功能,如图所示。 解答: (1)新建工程,并在窗体上添加一个文本框。 (2)在Form的Load事件过程中添加下列代码: Private Sub Form_Load() Text1.SelStart=0 Text1.SelLength=8 End Sub 运行后界面如图2-2所示。这一点可以在许多Windows应用软件的“另存为”对话框 的“文件名”框中见到。 .Form3 ▣x 选定文本框的部份内容 图2-2运行后界面 例2-2设计一个简易计算器的界面。 提示:实际操作时,可先画一个命令按钮,调整其大小后,先复制,后粘贴,可避免重 复设置按钮属性和重复调整按钮大小。在作粘贴时,系统会提示您是否创建控件数组,这时, 单击“否”按钮,重复粘贴操作,即可得到多个外观一样的命令按钮。 解答: (l)新建一个窗体,设置Caption属性为“简易计算器”。 (2)在窗体上画一个文本框,设置Text属性为空白。 (3)在窗体上画16个命令按钮,适当调整它们的大小和位置,然后在属性窗口中将它 们的Caption属性分别设置为1、2、3、4、5、6、7、8、9、0、.、C、+、-、*、/。如图 2-3所示。 高工程1-Form2(orm) -▣凶 简易计算器 ▣x ◇ 图2-3设计界面 例2-3编一帐号和密码输入的检验程序。对输入的帐号和密码规定如下:
@MKCø*¼+@O,åqr0KC*¼+R@ ö², TJ HIUN ô[\ST*¼+, HI[ ) $ tRSTÐqrJ #- %+5) $ %% 74 %)/07< 2$%+ Ó?ZÖ×ö 8 ²,&á ·[Vî '$(! WMXg@OY+ M*O+RÙâ, 8 Ó?ZÖ× 1 8 mImZ[Ö×, ²J0]} ^_&'() `Φ¬Z ^a° Zbc def a !()fa`()¦¬,[bc} ýþDzg.¯/$dh &} QVM¯O() fabc ¢ iâî½¾µ&'(), TJ HjIU ! klmnopq @MImZ[O, HrI[\_*¼+ ! stun @Pv, HwI[\_ = &'() x`EH¦¬Õ! ,Z[pRóE H klmnopq !@ j%r%w%y%z%{%|%}%~%%%k%%%%,ö rw ², 8 mÖ× 1 8 å rÊÀ,ÊÀ rCöJ
(1)帐号为不超过6位数字,密码为6位字符,在本题中,密码假定为“123456”。 (2)密码输入时在屏幕上不显示输入的字符,而以“*”代替。 (3)当输入不正确,如帐号为非数字字符或密码不正确时,显示有关信息。 (4)当输入正确时,关闭密码窗口,显示Windows操作系统的记事本窗口。 按要求完成有关控件的属性的设置,编写确定按钮的单击事件过程。相关界面如图24所示。 登录 账号 388888 给入密玛 密码 米米米米米米 密码错误 确定 取消 「重试 取消 图2-4登录窗口,输入密码对话框 解答: (1)新建工程,在窗体上添加2个文本框,2个标签框,2个命令按钮,并参照上图设 置标签框和命令按钮的Caption属性。 (2)编写以下事件代码: Private Sub Form Load() Text1.MaxLength=6 Text2.PasswordChar="*" End Sub Private Sub Text1 LostFocus() Dim i As Integer,s As String 1 If Not IsNumeric(Text1.Text)Then MsgBox"账号有非数字符号!",vbExclamation+vbRetryCancel,."输入账号" Textl.Text="" Textl.SetFocus Exit Sub End If If Len(Text1.Text)>6 Then MsgBox"账号不能多于6位!",vbExclamation+vbRetryCancel,"输入账号" Text1.Text="M Text1.SetFocus End If End Sub Private Sub Command1_Click() If Text2.Text="123456"Then Me.Hide Shell "c:\winnt\notepad.exe",vbMaximizedFocus Else MsgBox"密码错误",vbCritical+vbRetryCancel,"输入密码" Text2.Text ="M Text2.SetFocus
HI @ht = ÕdÚ r@ = ÕÚí [¼R rC@M>=O, HIrÊÀ}[\h±²ÊÀÚí ·M?Oq, HIÊÀh£ ö @dÚÚíYrh£} ±²iÌÍ, HIÊÀ£} rp ±² '$(! ýþ ¼p, (i$ ! åC()QV t,Ö×ö 8 ², 8 p ÊÀrY+ TJ HIUN [\ST *¼+ "#+ &'() ôc\ !"#+&'() , HrIå· qrJ #- %+5) $ )/07= # !!($0 79?9 2$%+ #- %+ 5)!! *,!"/ !,!%/? "1"! 0 !/9idÚí9 -+2 @-+A& 9ÊÀ9 799 %! 2%+ 2$"1 "1) ;= 0 !/9hî = Õ9 -+2 @-+A& 9ÊÀ9 799 %! 2$"1 2$%+ #- %+ $5 "1 79>=9 0 .$ %09BC(C $9 -+ D$! 2! !/9r79 -+ @-+A& 9ÊÀr9 799 %!
End If End Sub Private Sub Command2 Click() End End Sub (3)运行应用程序,得到如上图所示的运行界面。 2.5练习与思考 习题2-1什么是对象?Visual Basic中的对象与类的区别是什么? 习题2-2用标签和文本框都可以显示文本信息,二者的区别是什么? 习题2-3在print方法中利用Tab函数和String函数及Form窗体的AutoRedraw属性在 From Load事件中,显示如图2-5所示的图形。 提示:只要利用String和一个简单的循环结构完成。对Form窗体的AutoRedraw属性 设置为True后,Print、Line、Circle、Pset等方法在Form Load事件过程中才有作用。 .Form1-▣X 222 33333 4444444 555555555 66666666666 7777777777777 图2-5习题2-3要打印的图形 习题2-4新建一个工程,在名称为Forml的窗体上画一个名称为Lable1的标签,标题 为“请确认”:再画两个命令按钮,名称分别为“是”、“否”,高均为350、宽均为680。如 图2-6所示。 请在属性窗口中设置适当属性满足以下要求: 1)窗体标题为“确认”,窗体标题栏上不显示最大化和最小化按钮: 2)在任何情况下,按回车键都相当于单击“是”按钮:按E$C键都相当于单击“否” 按钮。 习题2-5新建一个工程,在名称为Forml的窗体上画一个命令按钮,名称为Cmd,其 标题为“移动”,如图2-7所示。要求编写适当的事件过程,使得程序运行时,每单击按钮 一次,按钮向左移动200。 台Forn1 。确认 ▣☒ 请确认! 移动 是 否 图2-6确认对话框 图2-7习题2-5运行窗口
2$"1 2$%+ #- %+ $5 2$ 2$%+ HIÓ? iâö\²Ó?Ö×, > 8 ¸¹.! ! R8-ç.¸¹ 8 "#*¼+ ·±²*¼ÌÍ Aç.¸¹ 8 [ R + d %/ dú ,A$ ( [ 5) $ R ±²ö 8> ²³, ²J4 %/ Q$%(, ,A$ ( !@ Z #%)%%#! Û [ 5) $ tRi, 8> 8 ³ 8 UN [w@ \_w@ ) + "# " @M 6Oû_l&'() w@M.O%M¯O ¡J@ >4%¢J@ = UN [w@ \_&'() w@ $ Î "@M ^O ö 8E ²,åx t iÓ?} ¨QV() © ()ª® ^ 44, 8= 6Y+ 8E 8> Ó?p