vb程序设计实用教程 vb程序设计实例100( 四 )



例如,假定有如图2.7.2所示的程序 。当焦点企图从Textl移到Text2时,Textl的Validate事件发生,同样当焦点企图从Text2移到Textl时,Text2的Validate事件发生 。当焦点企图从Textl移到Text3时,TextI的Validate事件暂时没有发生,因为Text3的CausesValidate为False,然后如果焦点企图继续移动到Text2时,Textl的Validate事件才发生 。

图2.7.2CausesValidate属性和Validate事件

CausesValidate属性和Validate事件的这一特性常常应用在如图2.7.3所示的程序中 。当在文本框中输入了无效数据时而又不知道如何输入有效数据时,用户往往选择Help命令寻求帮助或选择Cancel命令结束数据输入,此时不希望执行验证程序 。因为如果执行验证程序且发现了无效数据,则无法选择Help或Cancel了,用户就这样被套住了 。现在只要将文本框的CausesValidate属性设为True,命令按钮的CausesValidate属性为False,验证程序放在 Validate过程中,问题就解决了 。在默认情况下,所有控件的CausesValidation属性都为Tree 。

图2.7.3命令按钮的CausesValidate属性和Validate事件

并不是所有的控件都有Validate事件 。只有那些能用于输入数据的控件(如文本框、复选框、滚动条等)才有这个事件 。Validate事件过程如下:

Privme Sub object_Validate(Cancel As Boolean)



EndSub

其中,当参数Cancel被设为Tree后,焦点将不会离开对象 。

如果要将实验七第1题改用Validate事件和CausesValidation属性实现数据验证,则应有如下的程序 。

Sub txtMath_Validate(Cancel As Boolean)

If Val(txtMath.Text)<0 Or_

Val(txtMath.Text)>100 Then

Cancel=True

End If

End Sub

1.窗体顶部菜单栏中的菜单项与子菜单中的菜单项的区别

窗体顶部菜单栏中的菜单项与子菜单中的菜单项都是在菜单编辑器中定义的,但是它们是有区别的 。

(1)窗体顶部菜单栏中的菜单项不能定义快捷键,而子菜单中的菜单项可以有快捷键 。

(2)当有热键字母(菜单标题中"&"后的字母)时,按Alt+热键字母选择窗体顶部菜单栏中的菜单项,按热键字母选择子菜单中的菜单项(当子菜单打开时) 。子菜单没有打开时,按热键字母无法选择其中的菜单项 。

(3)尽管所有的菜单项都能响应Click事件,但是窗体顶部菜单栏中的菜单项不需要编写事件过程 。

2.在程序中对通用对话框的属性设置不起作用

在程序中对通用对话框的属性设置不起作用,多数情况是因为在弹出对话框后才进行属性设置 。例如,下面的程序代码就存在这样的问题,改正 *** 是将弹出对话框语句放到最后,即把CommonDialogl.Action=l放在所有属性设置语句的后面 。

CommonDialog1.Action=1

ConmaonDialog1.FileName="*.Bmp"

CommonDialogl.InitDir="C:\Windows"

CommonDialog1.Filter="Pictures(*.Bmp)|*.Bmp|All Files(*.*)|*.*"

CommonDialog1.FilterIndex=1

3.在工程中添加现有窗体时发生加载错误

在使用"工程"菜单中的"添加窗体"命令添加一个现存的窗体时经常发生加载错误,绝大多数是因为窗体名称冲突的缘故 。例如,假定当前打开了一个含有名称为Forml的工程,如果想把属于另一个工程的Forml窗体装入则肯定会出错 。

[注意]

窗体名与窗体文件名的区别 。在一个工程中,可以有两个窗体文件名相同的窗体(分布在不同的文件夹中),但是绝对不能同时出现两个窗体名相同的窗体 。

4.实时菜单的创建

实时菜单是由应用程序根据需要动态创建的 。在VB中,常见的实时菜单是"文件"菜单,该菜单显示了最近所使用的工程 。

创建实时菜单必须结合控件数组,用Load语句创建菜单项,用UnLoad清除菜单项 。

推荐阅读