处理用户输入

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

提示

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

键盘事件

您的控件可以处理的常见键盘事件包括 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 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 窗体控件

请参见

概念

Windows 窗体控件中的事件

在 Windows 窗体控件中定义事件

其他资源

处理和引发事件

Windows 窗体中的用户输入