滑鼠鍵盤事件
※ 註:以下範例皆在Windows Form 應用程式中執行,且表單中已有一個TextBox控制項,名為tetxBox1,是用來顯示輸出訊息的。且,程式碼都寫在
public partial class Form1 : Form{} 的括號{} 之中,也就是說,格式是這樣的:
public partial class Form1 : Form
{
範例程式碼
}
一、簡介
1. 在一個控制項上發生某事件後,程式可以對此事件產生「回應」。要設定一個控制項對事件的回應,可以這麼做:
在表單上點選該控制項à按下屬性面板上的事件按鈕
à對著事件名稱雙擊滑鼠左鍵à即會在程式碼中產生一個函式,如:
private void 控制項名稱_事件名稱(object sender, 事件參數類別 e)
{
}
在這個函式中就可以撰寫此回應的程式碼。
其中,e是「事件參數類別物件名稱」,可自訂。
2. 每種控制項所能夠觸發的事件不盡相同。但大概來說,所有控制項以及表單都能觸發本章所述的「滑鼠事件」與「鍵盤事件」,因此,「滑鼠事件」與「鍵盤事件」也被稱為「通用事件」。相對的,另有一詞為「專用事件」,指的是只有某控制項或者表單才能觸發、而其他控制相不能觸發的事件。
二、各類事件詳述
1. 滑鼠事件:
滑鼠事件,即是使用者操縱滑鼠將游標置於控制項、對控制項進行動做時,所觸發的事件。常見的滑鼠事件有:
事件名稱 |
觸發此事件的方式 |
Click |
在控制項上按一次滑鼠按鍵 |
DoubleClick |
在控制項上連按二次滑鼠按鍵 |
MouseClick |
在控制項上按一次滑鼠按鍵 |
MouseDoubleClick |
在控制項上連按二次滑鼠按鍵 |
MouseEnter |
把游標移到到控制項之上 |
MouseLeave |
把游標移到到控制項之上然後移開 |
MouseMove |
把游標移到到控制項之上然後持續移動 |
MouseHover |
把游標移到到控制項之上然後停止移動 |
※ 註二:在控制項上按一次滑鼠按鍵,會依序觸發MouseDown、Click、MouseUp三個事件。※ 註一:上述的「滑鼠按鍵」,可以是「滑鼠左鍵」、「滑鼠右鍵」、「滑鼠中鍵」。
※ 註三:在控制項上連按二次滑鼠按鍵,會依序觸發MouseDown、Click、MouseUp、MouseDown、DoubleClick、MouseUp六個事件。
(1) Click事件、DoubleClick事件、MouseEnter事件、MouseLeave事件、MouseHover事件:
Click事件的事件名稱為Click,DoubleClick事件的事件名稱為DoubleClick, MouseEnter事件的事件名稱為MouseEnter,MouseLeave事件的事件名稱為MouseLeave,MouseHover事件的事件名稱為MouseHover,他們的事件參數類別都是EventArgs。
※ EventArgs類別並不具有類別成員。
(2) MouseClick事件、MouseDoubleClick事件、MouseDown事件、MouseUp事件、MouseMove事件:
MouseClick事件的事件名稱為MouseClick,MouseDoubleClick事件的事件名稱為MouseDoubleClick,MouseDown事件的事件名稱為MouseDown,MouseUp事件的事件名稱為MouseUp,MouseMove事件的事件名稱為MouseMove,他們的事件參數類別都是MouseEventArgs。
(2-1) MouseEventArgs類別物件有幾個常用的成員,如下:
※ MouseEventArgs類別物件名稱.Button:表示觸發該事件的滑鼠按鍵。其值有三種可能性,MouseButtons.Left代表滑鼠左鍵,MouseButtons.Middle代表滑鼠中鍵,MouseButtons.Right代表滑鼠右鍵。
※ MouseEventArgs類別物件名稱.X:一個int,表示觸發該事件的游標的X座標值(以該控制項的座標值為座標原點)。
※ MouseEventArgs類別物件名稱.Y:一個int,表示觸發該事件的游標的Y座標值(以該控制項的座標值為座標原點)。
(※) 註:Click、DoubleClick事件適用於單純按下控制項,而不需要用到事件的細部資訊(如游標的座標)時。MouseClick、MouseDoubleClick事件則適用於需要用到細部資訊時。
(3) 使用範例:
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
textBox1.Text = e.X.ToString() + "," + e.Y.ToString();
}
則當滑鼠在pictureBox1上按下按鍵時,會顯示出游標的X座標、Y座標值(以該控制項的座標值為座標原點)。
2. 鍵盤事件:
鍵盤事件,即是使用者按下鍵盤按鈕所觸發的事件。常見的鍵盤事件有:
事件名稱 |
觸發此事件的方式 |
KeyPress |
在控制項上按下「具有ASCII碼的鍵盤按鈕」 |
KeyDown |
在控制項上按下任何鍵盤按鈕 |
KeyUp |
在控制項上按下任何鍵盤按鈕後放掉 |
※ 註一:欲知上述的「具有ASCII碼的鍵盤按鈕」其與對應的ASCII碼,請參看本資料夾的參考資料。鍵盤上並非每一個鍵都有相對應的ASCII碼。
※ 註二:在控制項上按下「具有ASCII碼的鍵盤按鈕」,事實上會依序觸發KeyDown、KeyPress、KeyUp三個事件。
(1) KeyPress事件:
事件名稱為KeyPress,事件參數類別為KeyPressEventArgs。
(1-1) KeyPressEventArgs類別的常用成員有:
※ KeyPressEventArgs類別物件名稱.KeyChar:一個char。乃是這個按鍵按下去之後會產生的字元。用Convert.ToInt32(字元),即回傳該字元的ASCII碼。
(2) KeyDown事件、KeyUp事件:
KeyDown事件的事件名稱為KeyDown,KeyUp事件的事件名稱為KeyUp,兩者的事件參數類別都是KeyEventArgs。
(2-1) KeyEventArgs類別的常用成員有:
※ KeyEventArgs類別物件名稱.Alt:一個bool。若該按鍵是<Alt>按鍵,則其值為true,否則為false。
※ KeyEventArgs類別物件名稱.Control:一個bool。若該按鍵是<Control>按鍵,則其值為true,否則為false。
※ KeyEventArgs類別物件名稱.Shift:一個bool。若該按鍵是<Shift>按鍵,則其值為true,否則為false。
※ KeyEventArgs類別物件名稱.KeyValue:一個int。代表該按鍵的按鍵編碼。關於鍵盤按鍵與按鍵編碼的對照,請看本資料夾中的參考資料。
(3) 範例:
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyValue == 37) // KeyValue37代表方向鍵的左鍵
{ textBox1.Left--; }
if (e.KeyValue == 38) // KeyValue38代表方向鍵的上鍵
{ textBox1.Top--; }
if (e.KeyValue == 39) // KeyValue39代表方向鍵的右鍵
{ textBox1.Left++; }
if (e.KeyValue == 40) // KeyValue40代表方向鍵的下鍵
{ textBox1.Top++; }
}
在此範例中,於textBox1被選取時按下方向鍵,則textBox1會依照所指示的方向來移動。
留言列表