第四章 命令按钮、标签和文本框 大多数应用程序中都有命令按钮CommandButton控件,用户可以单击按钮执行某项操作。 标签Label控件用来显示文本,但程序运行时Label控件中的文本是只读的,不允许用户编辑。 文本框TextBox控件用来输入和显示文本,允许用户编辑其中的文本。
命令按钮控件CommandButton 使用CommandButton控件创建,可以有不同的外观: Caption属性:该属性设定按钮显示的文字。 Style属性:控制按钮的显示类型,共有两种取值:标准类型和图形类型。 Picture属性:指定按钮中显示的图片。 BackColor属性:指定按钮的背景颜色。 MaskColor属性:指定按钮的图片中的透明色,即掩码。使用的前提是UseMaskColor属性设置为True。
命令按钮的快捷访问键 访问键为按钮的选中提供了一种快捷方式,即同时按下ALT键和访问键等同于鼠标单击该按钮。热键可以提高键盘操作的速度。 使用按钮的Caption属性赋予按钮一个访问键。在标题中,在想要指定为访问键的字符前加一个“&”符号,该字符就会带有一个下划线。比如:&Next,&Last
命令按钮的响应 使用CommandButton控件创建,只要用户单击按 钮,就会调用Click事件过程 程序执行有以下方法选中命令按钮: 鼠标单击按钮 用Tab键把焦点移到按钮上,按空格或回车键 使用按钮的快捷键(Alt+有下划线的字母) Caption属性的快捷字符前插入符号“&” 在程序代码中设置按钮的Value属性为True 在代码中直接调用按钮的Click事件
默认的命令按钮 设置按钮的Default属性为True, 直接使用Enter键即可选中(总是为默认选中的按钮,当窗口中有其他控件时才生效,增加一个文本框试试看) 设置按钮的Cancel属性为True, 用Esc键选中
命令按钮示例1 【例】点击一个按钮,发出铃声 界面元素组成: 一个命令按钮控件:Command1 编写Click事件过程(双击按钮即可进入代码窗口) Private Sub Command1_Click() Beep End Sub
命令按钮示例2 【例】在窗体上添加一个按钮,实现窗口的最大化和还原。
命令按钮示例2 设计一个命令按钮,命名为cmdSize (窗体的MaxButton 和MinButton属性均设置为False) : Private Sub cmdSize_Click() If cmdSize.Caption = "最大化(&L)" Then Me.WindowState = 2 cmdSize.Caption = "还原(&B)" Else Me.WindowState = 0 cmdSize.Caption = "最大化(&L)" End If End Sub
命令按钮示例3 【例】一个使用按钮红绿灯变化的小程序 VB示例:Controls\Controls.vbp 界面元素组成: 三个image控件,分别放红黄绿灯亮的图案 两个CommandButton控件,一个负责改变image控件的visible属性,另一个关闭窗口
标签控件Label 可以用来显示文本, 或用作其它控件的标识 Caption,显示文本,<1024 Autosize,为True,可自动水平适应长度 WordWrap,为True,可自动换行显示,前提是Autosize为True UseMnemonic,为True,则允许利用Label的快捷键将焦点移到下一控件(遵照TabIndex顺序) BackStyle, BorderStyle 背景透明, 边框样式 示例(VB自带controls\controls.vbp)
标签Label的用途 比如图中可输入教师信息,其中标签有两种用途: 标签可以放在它们前面作为输入提示 鼠标可以直接将光标放在某个文本框上,但使用键盘有时更快捷些。比如键盘Alt+P可以直接将光标移到电话输入框中。(前提是输入框的TabIndex属性要比对应标签的TabIndex大1)
文本框控件TextBox 程序运行时,通常使用TextBox控件让用户输入数据。 文本框中所看到的数据就是Text属性中存放的字符串。 Text属性:Text属性包含输入到TextBox控件中的文本。缺省时,文本框中输入的字符为单行,最多达2048个。若将控件的MultiLine属性设置为True,则可输入多达32K的文本。 Text属性是文本框的缺省属性,访问时可以省略书写。比如要指定或读取文本框内容: Text1.Text = “欢迎” 或者 Text1 = “欢迎” Form1.Print Text1.Text
文本框TextBox的重要属性 Text,文本框文字 MultiLine,允许多行 (true/false) ScrollBars,带滚动条 (无/水平/垂直/都有) PasswordChar,密码显示符号 MaxLength,允许输入最大字符数 SelStart,文本串内插入点(光标)位置 SelLength,选中文本宽度 SelText,返回当前选中的文本,如果对此属性重新赋值的话意味着插入该值到光标所在位置 Locked,运行状态下只读
TextBox控件的显示效果 支持多行:MultiLine属性为True 支持水平和垂直滚动条:指定ScrollBar属性
TextBox控件的文本 文本中的回车换行,则 文本中出现引号,则 使用chr(13)和 chr(10)或VB常量vbCrLf 比如: Text1.Text = “You’re” & chr(13) & chr(10) & “right” 文本中出现引号,则 Text1.Text=”He said: ” ”How do you do ” ” ” 或用chr(34)
TextBox控件示例1 【例】编写一个修改用户密码的程序,首先判断原始用户名和密码的正确性,然后输入两次新密码,两次新密码相同才能生效。(设置密码文本框的PasswordChar为*)
TextBox控件示例1 【确定】按钮的事件过程如下: Private Sub cmdOK_Click() '首先检查正确用户名和密码 If txtUserName.Text = "admin" And txtPassword.Text = "admin" Then If txtNewPwd1.Text = txtNewPwd2.Text Then ' ……(修改密码(文件或数据库)的代码放在此处) MsgBox "密码修改成功!", , "修改密码" Unload Me Else MsgBox "新密码输入有误,请重试!", , "修改密码" txtNewPwd2.SetFocus End If MsgBox "用户名或密码无效,请重试!", , "修改密码" txtUserName.SetFocus End Sub
TextBox控件示例1 【取消】按钮的事件过程如下: Private Sub cmdCancel_Click() Unload Me End Sub
TextBox控件示例2 通过任意方式造成文本框Text属性的变化,就会引发Change事件。 【例】编写程序输入语文、数学、外语三门功课的成绩,要求输入的同时计算平均成绩并输出,即一边输入一边计算。
TextBox控件的Change事件 编程思路:在输入或修改单科成绩的同时计算平均分,即在语文、数学和英语文本框的内容发生改变时就要立即重新计算平均分,并用计算结果修改平均成绩框的Text属性。因此需要编写这三个文本框的Change事件过程。代码如下: Private Sub txtChinese_Change() Dim sum As Double '用于计算总分 sum = 0 If txtChinese <> "" Then sum = sum + Val(txtChinese.Text) If txtMath <> "" Then sum = sum + Val(txtMath.Text) If txtEnglish <> "" Then sum = sum + Val(txtEnglish.Text) txtAvg = sum / 3 End Sub 因为文本框中存放的是字符串,不是可以计算的数字, 所以需要使用Val函数转换为数字。
采用控件数组实现上例*(参见第7章) 设计控件数组,包含三个TextBox控件元素txtScore(0)、txtScore(1)和txtScore(2) 这里为了更严格检验所输入的数据,使用IsNumeric函数来判定某字符串是否为数字,该函数返回True表示是数字,否则不是数字,不可计算。 公用一个事件过程 Private Sub txtScore_Change(index As Integer) Dim i As Integer sum = 0 For i =0 To 2 If IsNumeric( txtScore(i) ) Then sum = sum + Val( txtScore(i) ) Endif Next txtAvg = sum / 3 End Sub
TextBox控件示例3 有时对输入的字符类型有特殊要求。比如只允许输入数字,如果输入了其它字符应忽略。 可用文本框的KeyPress事件限制或转换输入的字符。 【例】为上例增加功能,来限定文本框仅接受数字字符。 Private Sub txtScore_KeyPress(Index As Integer,KeyAscii As Integer) Select Case KeyAscii Case Asc("0") To Asc("9") Case vbKeyBack Case Asc(".") '以上为正确字符,不做任何处理 Case Else KeyAscii = 0 '取消字符 Beep '发出提示音 End Select End Sub
TextBox控件示例4 用户输入了有效的键,但还要判输入值是否在有效范围 在Validate事件过程中进行检验,其中参数Cancel表示是否要取消焦点的移动,如果为true则不会引发LostFocus事件,焦点仍然在Textbox控件上。 Private Sub txtScore_Validate(Index As Integer, Cancel As Boolean) If Val(txtScore.Text) > 100 or Val(txtScore.Text)< 0 Then MsgBox “Invalid data!" Cancel = False End If End Sub
TextBox控件中的选中文本 所有Windows中的文本编辑工具都有共同的特点,就是可以选择所有文本或部分文本进行剪切、复制或其它操作,选中的文本以突出颜色显示。 SelStart属性:Long型整数,用来指定选定文本块的起始位置。如果没有选定的文本,则该属性指定插入点(编辑光标)的位置。 SelLength属性:Long型整数,指定所选的文本块的字符个数。任何情况下,一旦给SelLength属性设置一个大于0的值n,则会自动选中并突出显示从当前插入点(SelStart属性指定值)开始的n个字符。 SelText属性:是一个字符串,即选定的字符。如果没有字符被选定的话,就是空字符串。如果程序中对SelText赋值新的字符串,则该字符串将替换文本框中原选定的文本。
TextBox控件选中文本示例 通过设置SelStart和SelLength属性,可控制文本的选择。例如我们在数据录入程序中,用户经常会希望光标置于已有文本的尾部,或者在重新录入某项数据可能希望新的输入替换原有数据。 【例】对于分数输入的程序,在每个输入框重新获得焦点时,将原来文本框中输入的数据全部选中,以便于替换或修改。 代码如下: Private Sub txtScore_GotFocus(Index As Integer) txtScore(Index).SelStart = 0 txtScore(Index).SelLength = Len(txtScore(Index)) End Sub