处理用户输入
本主题介绍 System.Windows.Forms.Control 提供的主键盘和鼠标事件。 处理事件时,控件作者应重写受保护的 On
EventName 方法,而不是向事件附加委托。 若要查看事件,请参阅从组件引发事件。
注意
如果没有与事件关联的数据,则会将基类 EventArgs 的一个实例作为参数传递给 On
EventName 方法。
键盘事件
控件可以处理的常见键盘事件包括: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 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 窗体控件。