第 5 步:使控件响应用户 要允许用户更改灯的颜色,必须检测到用户的鼠标单击操作。有经验的 Visual Basic 开发人员都知道,可以使用多种方法实现这一目的。我们使用最简单的一种方法,即检测 MouseUp 事件。下面是检测用户单击并更改 Status 属性以与之匹配的代码:
Private Sub TrafficLight_MouseUp(ByVal sender As Object, _ ByVal e As System.Windows.Forms.MouseEventArgs) _ Handles MyBase.MouseUp Dim nMidPointX As Integer = CInt(Me.Size.Width * 0.5) Dim nCircleRadius As Integer = nMidPointX If Distance(e.X, e.Y, nMidPointX, CInt(Me.Size.Height / 6)) _ < nCircleRadius Then Me.Status = TrafficLightStatus.statusRed Exit Sub End If If Distance(e.X, e.Y, nMidPointX, CInt(Me.Size.Height / 2)) _ < nCircleRadius Then Me.Status = TrafficLightStatus.statusYellow Exit Sub End If If Distance(e.X, e.Y, nMidPointX, CInt((5 * Me.Size.Height) / 6)) _ < nCircleRadius Then Me.Status = TrafficLightStatus.statusGreen End If
End Sub
Private Function Distance(ByVal X1 As Integer, _ ByVal Y1 As Integer, _ ByVal X2 As Integer, _ ByVal y2 As Integer) As Integer Return CInt(System.Math.Sqrt((X1 - X2) ^ 2 + (Y1 - y2) ^ 2)) End Function
事件处理非常简单。检查鼠标单击的位置和每个圆心之间的距离。(请注意,圆心分别位于控件下方 1/6、1/2 和 5/6 的位置。如果不太明白,可以在纸上画出来看看。)如果计算出的距离小于圆的半径,则更改 Status 属性。
距离由 Distance 函数使用您可能在代数课中学过的公式计算。请注意,平方根函数是从 System.Math 命名空间中获得的,数学函数通常都保存在该命名空间中。
|