本主题描述了由 System.Windows.Forms.Control 提供的主键盘和鼠标事件。 处理事件时,控件作者应该重写受保护的 On事件名称 方法,而不是向事件附加委托。 若要查看事件,请参见 从组件引发事件。
提示
如果没有与事件关联的数据,则会将基类 EventArgs 的一个实例作为参数传递给 On事件名称 方法。
键盘事件
您的控件可以处理的常见键盘事件包括 KeyDown、KeyPress 和 KeyUp。
| 事件名称 | 要重写的方法 | 事件说明 | 
|---|---|---|
| KeyDown | void OnKeyDown(KeyEventArgs) | 仅在开始按下键时引发。 | 
| KeyPress | void OnKeyPress (KeyPressEventArgs) | 每次按键时引发。 如果一直按住某个键,则按操作系统定义的重复速率引发 KeyPress 事件。 | 
| KeyUp | void OnKeyUp(KeyEventArgs) | 释放键时引发。 | 
提示
处理键盘输入比重写上表中的事件要复杂得多,这超出了本主题的讨论范围。 有关更多信息,请参见 Windows 窗体中的用户输入。
鼠标事件
您的控件可以处理的鼠标事件包括 MouseDown、MouseEnter、MouseHover、MouseLeave、MouseMove 和 MouseUp。
| 事件名称 | 要重写的方法 | 事件说明 | 
|---|---|---|
| MouseDown | void OnMouseDown(MouseEventArgs) | 指针位于控件上时,按下鼠标按钮会引发该事件。 | 
| MouseEnter | void OnMouseEnter(EventArgs) | 当指针首次进入控件区域时引发。 | 
| MouseHover | void OnMouseHover(EventArgs) | 当指针悬停于控件上时引发。 | 
| MouseLeave | void OnMouseLeave(EventArgs) | 当指针离开控件区域时引发。 | 
| MouseMove | void OnMouseMove(MouseEventArgs) | 当指针在控件区域中移动时引发。 | 
| MouseUp | void OnMouseUp(MouseEventArgs) | 指针位于控件上或指针离开控件区域时,松开鼠标按钮会引发该事件。 | 
下面的代码片段演示了重写 MouseDown 事件的例子。
Protected Overrides Sub OnMouseDown(ByVal e As MouseEventArgs)
    MyBase.OnMouseDown(e)
    If Not (myAllowUserEdit) Then
        Return
    End If
    Capture = True
    dragging = True
    SetDragValue(New Point(e.X, e.Y))
End Sub
protected override void OnMouseDown(MouseEventArgs e) {
    base.OnMouseDown(e);
    if (!allowUserEdit) {
        return;
    }
    Capture = true;
    dragging = true;
    SetDragValue(new Point(e.X, e.Y));
}
下面的代码片段演示了重写 MouseMove 事件的例子。
Protected Overrides Sub OnMouseMove(ByVal e As MouseEventArgs)
    MyBase.OnMouseMove(e)
    If (Not myAllowUserEdit Or Not dragging) Then
        Return
    End If
    SetDragValue(New Point(e.X, e.Y))
End Sub
protected override void OnMouseMove(MouseEventArgs e) {
    base.OnMouseMove(e);
    if (!allowUserEdit || !dragging) {
        return;
    }
    SetDragValue(new Point(e.X, e.Y));
}
下面的代码片段演示了重写 MouseUp 事件的例子。
Protected Overrides Sub OnMouseUp(ByVal e As MouseEventArgs)
    MyBase.OnMouseUp(e)
    If (Not myAllowUserEdit Or Not dragging) Then
        Return
    End If
    Capture = False
    dragging = False
    Value = dragValue
    OnValueChanged(EventArgs.Empty)
End Sub
protected override void OnMouseUp(MouseEventArgs e) {
    base.OnMouseUp(e);
    if (!allowUserEdit || !dragging) {
        return;
    }
    Capture = false;
    dragging = false;
    value = dragValue;
    OnValueChanged(EventArgs.Empty);
}
有关 FlashTrackBar 示例的完整源代码,请参见 如何:创建显示进度的 Windows 窗体控件。