處理使用者輸入
本主題將描述 System.Windows.Forms.Control 所提供的主要鍵盤和滑鼠事件。 在處理事件時,控制項作者應該覆寫保護的 OnEventName 方法,而不是附加委派 (Delegate) 至事件。 如需檢視事件,請參閱從元件引發事件。
注意事項 |
---|
如果沒有與事件相關聯的資料,會將基底類別 (Base Class) EventArgs 的執行個體 (Instance) 當做引數傳遞給 OnEventName 方法。 |
鍵盤事件
控制項可以處理的一般鍵盤事件為 KeyDown、KeyPress 和 KeyUp。
事件名稱 |
要覆寫的方法 |
事件說明 |
---|---|---|
KeyDown |
void OnKeyDown(KeyEventArgs) |
只有在按鍵初次按下時引發。 |
KeyPress |
void OnKeyPress (KeyPressEventArgs) |
每次按鍵被按下時引發。 如果按下按鍵不放,KeyPress 事件會以作業系統定義的重複率來引發。 |
KeyUp |
void OnKeyUp(KeyEventArgs) |
在放開按鍵時引發。 |
注意事項 |
---|
處理鍵盤輸入較覆寫前面表格中的事件更為複雜,而且超出這個主題的範圍。 如需詳細資訊,請參閱 Windows Form 中的使用者輸入。 |
滑鼠事件
控制項可以處理的滑鼠事件為 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 範例的完整原始程式碼,請參閱 HOW TO:建立顯示進度的 Windows Form 控制項。