4.6 文本框

文本框控件既可以用来输入数据,也可以用来输出数据。其作用在Visual Basic程序设计中是不可估量的。本节将详细讲述文本框控件最重要的属性、方法和事件。

4.6.1 文本框的常用属性

1. Text属性

Text属性是文本框最重要的属性,其作用为设置或返回文本框中显示的内容。例如:

        Text1.text="Hello!"

该语句的作用是将字符串“Hello”显示到文本框Text1中。又例如语句:

        x=Text1.text

的作用是将文本框Text1中现有的内容提取出来,赋值给变量x。这里需要注意Text属性返回值的类型是字符类型与InputBox函数的返回值一样。假如,在文本框中用户输入了15,那么执行刚才的语句之后x的值就会变为字符串“15”。如果想将变量x赋值为数值型的数据,应该使用Val函数转换,比如上面的代码应当写为:

        x=Val(Text1.text)

2. Font属性

文本框的Font属性和其他控件Font属性一样。可以用其设置显示文本的字体、字号、粗体斜体等。用属性窗口设置Font属性前面已经讲述过,下面带领读者学习如何用代码设置该属性。

使用代码设置时,Font被分割成FontName、FontSize、FontBold、FontItalic、FontUnderline等属性。分别控制字体名称、字体大小、粗体、斜体和下划线。例如下面的代码分别实现了将Text1的字体设置为宋体、将字号设置为20、并加上了粗体、斜体、下划线的效果。

        01  Text1.FontName = "宋体"
        02  Text1.FontSize = 20
        03  Text1.FontBold = True
        04  Text1.FontItalic = True
        05  Text1.FontUnderline = True

3. MaxLength属性

MaxLength属性用来设置允许在文本框中输入的最大字符个数。通常会取默认值0,即在文本框中输入的字符数不能超过32 K。登录窗体的文本框通常会用到此属性。

4. MultiLine属性

MultiLine属性用来控制文本框内是否能够换行,即是否能显示多行文本。如果将其设置为True,文本框内可以写多行,否则只能显示单行。

5. PasswordChar

PasswordChar用来设置密码文本框内显示的内容。例如,将文本框的该属性设置为星号(*)后在运行状态下,用户输入任何字符都会显示为星号。

6. SelLength、SelStart和SelText 属性

❑SelLength:返回或设置所选择的字符数。

❑SelStart:返回或设置所选择的文本的起始点;如果没有文本被选中,则指出插入点的位置。

❑SelText:返回或设置含有当前所选择的文本字符串;如果没有字符被选中,则含有一个空字符串。

这3个属性只能在运行状态下才能被设置。例如,

        01   Text1.Text = "Studing VB!"
        02   Text1.SelStart = 8
        03   Text1.SelLength = 2
        04   MsgBox Text1.SelText

这段代码第一条语句的作用是将一个字符串“Studing VB!”显示到Text1中。第二条和第三条语句为从Text1中字符串的第8个字符位开始向后选择两个字符长度的文本,即选中了“VB”两个字符。第四条语句的意思是将Text1文本框中被选中的文本(VB)显示到消息框中。

4.6.2 文本框的事件和方法

文本框支持Click、DblClick等鼠标事件,同时支持Change、GotFocus、LostFocus等事件。

1. Change事件

当用户通过键盘改变文本框中的内容,或通过程序代码改变Text属性时将触发Change事件。程序运行后,在文本框中每键入一个字符或者删除一个字符都会触发一次Change事件。例如,在运行状态下,当用户使用键盘向一个空文本框中输入“abc”时,会触发三次Change事件,如果该事件过程中用户写入了代码,该代码将会被执行三次。

2. GotFocus事件

当文本框获得焦点(光标)时触发GotFocus事件。获得焦点可以通过TAB键切换,或单击对象之类的用户动作,或在代码中用SetFocus方法改变焦点来实现。要注意的是一个控件仅当其Enabled和Visible属性都设置为True时才能接收焦点。Visual Basic中的可见对象都拥有该事件。

3. LostFocus事件

当文本框失去焦点(光标)时触发LostFocus事件。该事件主要是用来对文本框中的数据进行检查和确认的。

4. SetFocus方法

SetFocus方法是文本框应用中经常遇到的一种方法,其作用主要是让某个文本框获得焦点。例如,假设当前Text1文本框拥有焦点,而想让Text2文本框获得焦点的代码可以写为:

        Text2.SetFocus

4.6.3 应用案例—运算器

【实例4.5】实现一个简单的运算器。运行界面如图4.7所示。

图4.7 实例4.5界面

程序中各对象的属性设置如表4.7所示。

表4.7 实例4.5对象的属性设置

当运行程序后,在第一个文本框和第二个文本框中分别录入两个操作数,然后单击任意运算按钮之后,在第三个文本框中显示运算结果。编写程序如下。

        01   Private Sub cmdAdd_Click()
        02         Dim x As Single
        03         Dim y As Single
        04         Dim z As Single
        05         x = Val(txtFirst.Text)
        06         y = Val(txtSecond.Text)
        07         z = x + y
        08         txtResult.Text = Str(z)
        09   End Sub
        10
        11   Private Sub cmdSub_Click()
        12         Dim x As Single
        13         Dim y As Single
        14         Dim z As Single
        15         x = Val(txtFirst.Text)
        16         y = Val(txtSecond.Text)
        17         z = x - y
        18         txtResult.Text = Str(z)
        19   End Sub
        20
        21   Private Sub cmdMul_Click()
        22         Dim x As Single
        23         Dim y As Single
        24         Dim z As Single
        25         x = Val(txtFirst.Text)
        26         y = Val(txtSecond.Text)
        27         z = x * y
        28         txtResult.Text = Str(z)
        29   End Sub
        30
        31   Private Sub cmdDiv_Click()
        32         Dim x As Single
        33         Dim y As Single
        34         Dim z As Single
        35         x = Val(txtFirst.Text)
        36         y = Val(txtSecond.Text)
        37         z = x / y
        38         txtResult.Text = Str(z)
        39   End Sub
        40
        41   Private Sub cmdClear_Click()
        42         txtFirst.Text = ""
        43         txtSecond.Text = ""
        44         txtResult.Text = ""
        45         txtFirst.SetFocus
        46   End Sub

【代码说明】代码第02~04行声明了x、y、z三个单精度实数型变量(因为用户有可能会输入带有小数点的数值);第05~06行的作用是将两个文本框里的内容转换成数值型的数据后赋给了变量x、y;第07行将x、y两个变量之和赋值给了变量sum;第08行用Str函数将sum中的值转换成字符串后将其显示到第三个文本框内。其他运算按钮单击事件中的语句可以参考“加”按钮。“清除”按钮Click事件里第42~44行的作用是将三个文本框中的内容清空,第45行的作用是让第一个文本框获得焦点,即让光标跳到第一个文本框。其目的在于方便用户直接输入,省去拿起鼠标点击该文本框的动作。

Visual Basic中虽然不要求变量声明,但是笔者强烈建议在用到变量时尽量声明,这样可以省去以后编程中的很多麻烦,为了强迫自己进行变量声明,可以选择“工具”|“选项”菜单项,在打开的“选项”对话框的“编辑器”选项卡内“要求变量声明”前打上钩。该对话框其他内容请参考本书第1章1.3.6小节。Visual Basic中除了不要求变量声明以外还会为用户自动转换类型,如上面的语句txtResult.Text =Str(z)可以写为txtResult.Text =z。但是,笔者建议最好使用显式转换方法。

注意

本实例代码中存在一个严重的缺点,当第二个文本框内输入的是0时,点击“除”按钮就会出现异常。原因是除数成为了零,因此应该在执行除操作之前进行判断,具体方法可以参考第5章选择结构的内容。