处理用户输入

本主题介绍 System.Windows.Forms.Control 提供的主键盘和鼠标事件。 处理事件时,控件作者应重写受保护的 OnEventName 方法,而不是向事件附加委托。 若要查看事件,请参阅从组件引发事件

注意

如果没有与事件关联的数据,则会将基类 EventArgs 的一个实例作为参数传递给 OnEventName 方法

键盘事件

控件可以处理的常见键盘事件包括:KeyDownKeyPressKeyUp

事件名称 要重写的方法 事件说明
KeyDown void OnKeyDown(KeyEventArgs) 仅在最初按下键时引发。
KeyPress void OnKeyPress

(KeyPressEventArgs)
每次按键时引发。 如果一直按住某个键,则按操作系统定义的重复速率引发 KeyPress 事件。
KeyUp void OnKeyUp(KeyEventArgs) 在松开某个键时引发。

注意

处理键盘输入比重写上表中的事件要复杂得多,这超出了本主题的讨论范围。 有关详细信息,请参阅 Windows 窗体中的用户输入

鼠标事件

控件可以处理的鼠标事件包括:MouseDownMouseEnterMouseHoverMouseLeaveMouseMoveMouseUp

事件名称 要重写的方法 事件说明
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 override void OnMouseDown(MouseEventArgs e) {
    base.OnMouseDown(e);
    if (!allowUserEdit) {
        return;
    }
    Capture = true;
    dragging = true;
    SetDragValue(new Point(e.X, e.Y));
}
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

以下代码片段演示了一个重写 MouseMove 事件的示例。

protected override void OnMouseMove(MouseEventArgs e) {
    base.OnMouseMove(e);
    if (!allowUserEdit || !dragging) {
        return;
    }
    SetDragValue(new Point(e.X, e.Y));
}
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

以下代码片段演示了一个重写 MouseUp 事件的示例。

protected override void OnMouseUp(MouseEventArgs e) {
    base.OnMouseUp(e);
    if (!allowUserEdit || !dragging) {
        return;
    }
    Capture = false;
    dragging = false;
    value = dragValue;
    OnValueChanged(EventArgs.Empty);
}
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

有关 FlashTrackBar 示例的完整源代码,请参阅如何:创建显示进度的 Windows 窗体控件

另请参阅