Visual Basic 事件处理

事件基本上是一种用户操作,如按键、单击、鼠标移动等,或一些事件,如系统生成的通知。应用程序需要在事件发生时做出响应。

单击按钮,或在文本框中输入一些文本,或单击菜单项,都是事件的示例。事件是调用函数或可能导致其他事件的操作。事件处理程序是告诉如何响应事件的函数。

VB 是一种事件驱动语言。主要有两种类型的事件:

  • 鼠标事件
  • 键盘事件

处理鼠标事件

鼠标事件在窗体和控件中随鼠标移动而发生。以下是与控件类相关的各种鼠标事件:

  • MouseDown:当按下鼠标按钮时发生
  • MouseEnter:当鼠标指针进入控件时发生
  • MouseHover:当鼠标指针悬停在控件上时发生
  • MouseLeave:当鼠标指针离开控件时发生
  • MouseMove:当鼠标指针移动到控件上时发生
  • MouseUp:当鼠标指针位于控件上方且松开鼠标按钮时发生
  • MouseWheel:当鼠标滚轮移动且控件具有焦点时发生

鼠标事件的事件处理程序获取 MouseEventArgs 类型的参数。MouseEventArgs 对象用于处理鼠标事件。它具有以下属性:

  • Buttons :表示鼠标按钮已按下
  • Clicks : 表示单击次数
  • Delta : 表示鼠标滚轮旋转的卡位数
  • X : 指示鼠标单击的 x 坐标
  • Y : 指示鼠标单击的 y 坐标

实例

下面是一个实例,它显示了如何处理鼠标事件。

使用以下步骤:

  • 在表单中添加三个标签、三个文本框和一个按钮控件。
  • 将标签的文本属性分别更改为 Customer ID、Name 和 Address。
  • 将文本框的名称属性分别更改为 txtID、txtName 和 txtdaddress。
  • 将按钮的文本属性更改为 'Submit'。
  • 在代码编辑器窗口中添加以下代码:
  1. Public Class Form1
  2. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  3. ' Set the caption bar text of the form.
  4. Me.Text = "tutorialspont.com"
  5. End Sub
  6. Private Sub txtID_MouseEnter(sender As Object, e As EventArgs)_
  7. Handles txtID.MouseEnter
  8. 'code for handling mouse enter on ID textbox
  9. txtID.BackColor = Color.CornflowerBlue
  10. txtID.ForeColor = Color.White
  11. End Sub
  12. Private Sub txtID_MouseLeave(sender As Object, e As EventArgs) _
  13. Handles txtID.MouseLeave
  14. 'code for handling mouse leave on ID textbox
  15. txtID.BackColor = Color.White
  16. txtID.ForeColor = Color.Blue
  17. End Sub
  18. Private Sub txtName_MouseEnter(sender As Object, e As EventArgs) _
  19. Handles txtName.MouseEnter
  20. 'code for handling mouse enter on Name textbox
  21. txtName.BackColor = Color.CornflowerBlue
  22. txtName.ForeColor = Color.White
  23. End Sub
  24. Private Sub txtName_MouseLeave(sender As Object, e As EventArgs) _
  25. Handles txtName.MouseLeave
  26. 'code for handling mouse leave on Name textbox
  27. txtName.BackColor = Color.White
  28. txtName.ForeColor = Color.Blue
  29. End Sub
  30. Private Sub txtAddress_MouseEnter(sender As Object, e As EventArgs) _
  31. Handles txtAddress.MouseEnter
  32. 'code for handling mouse enter on Address textbox
  33. txtAddress.BackColor = Color.CornflowerBlue
  34. txtAddress.ForeColor = Color.White
  35. End Sub
  36. Private Sub txtAddress_MouseLeave(sender As Object, e As EventArgs) _
  37. Handles txtAddress.MouseLeave
  38. 'code for handling mouse leave on Address textbox
  39. txtAddress.BackColor = Color.White
  40. txtAddress.ForeColor = Color.Blue
  41. End Sub
  42. Private Sub Button1_Click(sender As Object, e As EventArgs) _
  43. Handles Button1.Click
  44. MsgBox("Thank you " & txtName.Text & ", for your kind cooperation")
  45. End Sub
  46. End Class

当使用 Microsoft Visual Studio 工具栏上的 开始 按钮执行并运行上述代码时,它将显示以下窗口:

尝试在文本框中输入文本并选中鼠标事件:


处理键盘事件

以下是与 Control 类相关的各种键盘事件:

  • KeyDown:当按下键且控件具有焦点时发生
  • KeyPress:当按键且控件具有焦点时发生
  • KeyUp: 在控件具有焦点时释放键时发生

KeyDownKeyUp 事件的事件处理程序获取 KeyEventArgs 类型的参数。

此对象具有以下属性:

  • Alt:表示是否按下 ALT
  • Control:表示是否按下 CTRL
  • Handled::表示是否处理事件
  • KeyCode:存储事件的键盘代码
  • KeyData:存储事件的键盘数据
  • KeyValue:存储事件的键盘值
  • Modifiers:它表示按了哪些修饰键(Ctrl、Shift 和 / 或 Alt)
  • Shift:表示是否按下 Shift

KeyDownKeyUp 事件的事件处理程序获取 KeyEventArgs 类型的参数。此对象具有以下属性:

  • Handled:表示是否处理按键事件
  • KeyChar:存储与按键对应的字符

实例

让我们继续上一个实例,以演示如何处理键盘事件。该代码将验证用户是否为其 customer ID 和 age 输入了一些数字。

  • 添加一个文本属性为 'Age' 的标签,并添加一个名为 txtAge 的对应文本框。
  • 添加以下代码以处理文本框 txtIDKeyUP 事件。
  1. Private Sub txtID_KeyUP(sender As Object, e As KeyEventArgs) _
  2. Handles txtID.KeyUp
  3. If (Not Char.IsNumber(ChrW(e.KeyCode))) Then
  4. MessageBox.Show("Enter numbers for your Customer ID")
  5. txtID.Text = " "
  6. End If
  7. End Sub
  • 添加以下代码以处理文本框 txtIDKeyUP 事件。
  1. Private Sub txtAge_KeyUP(sender As Object, e As KeyEventArgs) _
  2. Handles txtAge.KeyUp
  3. If (Not Char.IsNumber(ChrW(e.keyCode))) Then
  4. MessageBox.Show("Enter numbers for age")
  5. txtAge.Text = " "
  6. End If
  7. End Sub

使用 Microsoft Visual Studio 工具栏上的 开始 按钮执行并运行上述代码时,将显示以下窗口:

如果将 age 或 ID 的文本保留为空或输入一些非数字数据,则会显示一个警告消息框并清除相应的文本: