Visual Basic 2005 學習 範本 第 8 章鍵盤 滑鼠與功能表
8-1 鍵盤事件 雖然滑鼠是一個非常好用的輸入工具, 但是鍵盤仍是目前輸入資料的主要方式, 因為在一般的應用程式中, 經常是透過 文字方塊 物件來處理使用者由鍵盤輸入的資料 有時候要處理一些較特殊的按鍵 ( 如大小寫鎖定鍵 ) 或組合按鍵時, 就更必須用特定的鍵盤事件來處理 Visual Basic 提供了下面三個常用的事件讓我們能輕易地完成鍵盤的處理工作 : 事件名稱說明 物件 _KeyPress 物件 _KeyDown 物件 _KeyUp 物件擁有駐點時並按鍵會觸發該物件的 KeyPress 事件, 但無法判斷目前的按鍵是放開或按住 在指定物件上按下鍵盤時會觸發該物件的 KeyDown 事件 在指定物件上放開己按下的鍵盤時會觸發該物件的 KeyUp 事件 說明 物件必須有駐點 ( 或稱控制權,Focus), 物件的 KeyDown 事件 KeyUp 事件 KeyPress 才會有作用 8-2
一 KeyPress 事件 當某個物件取得駐點時, 我們若按下鍵盤的某個按鍵, 就會觸動該物件的 KeyPress 事件 要注意的是所按下的鍵盤按鍵必須產生 KeyAscii 碼, 物件的 KeyPress 事件才會被觸發 若使用者按下的按鍵不是字元按鍵 ( 例如方向鍵 Shift Tab F1 Caps Lock 鍵 ), 是不會觸動 KeyPress 事件, 但 KeyDown 和 KeyUp 事件仍會被觸動 KeyPress 的功能主要是在取得由鍵盤所按鍵的字元, 所以檢查字元是否合法的程式碼要寫在 KeyPress 事件中 事件中引數 e 的 KeyChar 屬性值可以取得輸入的字元, 其資料型別為字元 (Char) 如果想將字元轉為 ASCII 碼 ( 鍵盤碼 ), 可以使用 Asc 函數 例如 : Ascii_num = Asc(e.KeyChar) 8-2
一 KeyPress 事件 KeyPress 事件中引數 e 的 Handled 屬性值也是非常重要, 如果我們檢查使用者輸入的字元為不合法時, 只要將 Handled 屬性值設為 True, 該字元就會被清除 常用按鍵的 ASCII 碼如下表所示 : 常用的按鍵 0 至 9 48 至 57 A 至 Z a 至 z 65 至 90 97 至 122 Enter 和 Esc 13 和 27 BackSpace ( 退位鍵 ) 8 空白鍵 32 ASCII 碼值. + - * / 46 43 45 42 47 8-3
範例 8_1_1 使用者只能輸入數值 0-9 負號 小數點和退位鍵, 若輸入的字元不符合要求出現提示訊息 ; 若輸入字元正確, 馬上換算成華氏溫度顯示 執行結果 輸入字元不正確時出現的錯誤訊息 8-3
問題分析 1. 在文字方塊的 KeyPress 事件中, 檢查輸入字元是否合法, 不合法就設定 e.handled 屬性值為 True 2. 攝氏和華氏溫度的換算公式為 : F= (9 / 5) * C + 32 8-4
介面設計 8-4
編寫程式碼 第 3 行 : 用 Asc 函數將輸入字元轉成 ASCII 碼 第 4-7 行 : 檢查字元的 ASCII 碼是否合法 8-5
二 KeyDown 和 KeyUp 事件 在電動遊戲的操作中, 鍵盤的操作是最常使用的, 例如按下鍵盤按鍵不放子彈會不停的發射, 放開鍵盤按鍵子彈即停止發射, 為了達成上述效果,VB 提供了 KeyDown 與 KeyUp 事件 當使用者按下鍵盤按鍵不放時即會觸發 KeyDown 事件, 當放開鍵盤按鍵時即會觸發 KeyUp 事件 說明 1. 當按下鍵盤按鍵時, 首先觸發 KeyDown 事件, 再來是執行 KeyPress 事件, 最後才是觸發 KeyUp 事件 2.KeyPress 事件可傳回所按鍵盤之 ASCII 碼, 但無法得知鍵盤是按下或放開 而 KeyDown 及 KeyUp 事件能處理 KeyPress 事件無法處理的特殊鍵盤按鍵, 如功能鍵 組合鍵... 等 8-5
二 KeyDown 和 KeyUp 事件 在 KeyDown 與 KeyUp 事件程序中, 所按下按鍵的按鍵碼 (KeyCode) 可由 e.keycode 取得 若要得知該鍵意義, 可經由 e.keycode.tostring 敘述輸出 常用的按鍵碼如下 : 1. 字母 數字鍵對應的按鍵碼如下 : 按鍵 按鍵碼 (KeyCode) A~Z 0~9 65~90 48~57 8-5~6
常用的按鍵碼 : 2. 鍵盤右邊九宮格方向鍵所對應的掃描碼如下 : 36 38 33 掃描碼 7 Home 8 9 PgUp 37 12 39 掃描碼 4 5 6 35 40 34 掃描碼 1 End 2 3 PgDn 8-5~6
常用的按鍵碼 : 3. 常用特殊鍵對應的 KeyCode 如下 : 按鍵 KeyCode 按鍵 KeyCode F1~F12 鍵 112~123 Enter 鍵 13 SHIFT 鍵 16 Backspace 鍵 32 Ctrl 鍵 17 空白鍵 8 Alt 鍵 18 91 Caps Lock 鍵 20 除查 e.keycode 的掃描碼外, 還可以用 Keys 列舉型別來表示 例如向左鍵的 Keys 列舉型別為 Keys.Left; 退位鍵為 Keys.Back 用 Keys 列舉型別就不用查掃描碼, 也比較具備可讀性 例如 : If e.keycode = Keys.Enter Then 若使用者按 <Enter> 鍵 8-6~7
範例 8_1_2 利用鍵盤的方向鍵, 來控制圖片移動的方向 若按住方向鍵不放時, 圖片會持續移動 ; 放開則圖片回到表單中央 執行結果 8-3
問題分析 1. 在 KeyDown 事件中檢查 e.keycode 是否為方向鍵, 若是就移動圖片方塊的位置 2. 在 KeyUp 事件中讓球 ( 圖片方塊 ) 回到表單中央 介面設計 屬性預設名稱 Name ( 名稱 ) Size ( 大小 ) Image ( 圖形 ) Picture1 picmove 40,40 ball.gif 8-7
編寫程式碼 第 1-4 行 : 在 Form1_Load 事件中, 設定 picmove 放在表單中央 第 6-15 行 : 用 Select 選擇結構, 設定 picmove 的位置 8-8
8-2 滑鼠事件 透過滑鼠的操作, 能夠快速的點選各種按鈕 移動物件 插入點或執行各種應用程式 因此滑鼠事件是很重要的, 下表是 VB 常用的滑鼠事件程序說明 物件 _MouseClick 事件名稱說明 物件 _MouseDoubleClick 物件 _MouseDown 物件 _MouseUp 物件 _MouseMove 物件 _MouseEnter 物件 _MouseLeave 物件 _MouseHover 在物件上按滑鼠左鍵一下時觸發 在物件上快按滑鼠左鍵兩下時觸發 在物件上按滑鼠任一鍵 ( 包含按左鍵 中鍵 右鍵 ) 時觸發 在物件上按住的滑鼠任一鍵並放開時觸發 滑鼠在物件上移動時觸發 滑鼠進入物件範圍時觸發 滑鼠離開物件範圍時觸發 滑鼠在物件範圍內停留時觸發 8-9
一 Click MouseClick 事件 當我們在物件上按下滑鼠左鍵再放開時, 會觸動該物件的 Click 和 MouseClick 事件 因為兩個事件都會被觸動, 所以程式碼只要寫在其中之一即可 MouseClick 事件一定是因按滑鼠才觸動, 但 Click 事件不一定是因按滑鼠才觸動, 例如按快捷鍵也可以觸動 二 DoubleCick MouseDoubleClick 事件 當我們連續快速地按滑鼠左鍵兩次就稱為 Double Click ( 快按兩下 連擊 ), 當在物件上快按兩下滑鼠時, 會觸動該物件的 DoubleClick 和 MouseDoubleClick 事件 因為兩個事件都會觸動, 所以程式碼只要寫在其中之一即可 另外, 同時也會觸動 Click 和 MouseClick 事件 8-9
三 MouseDown MouseUp 事件 按下滑鼠任一按鍵 ( 包含左鍵 右鍵 中鍵 ) 時會觸發 MouseDown 事件 若按下滑鼠左鍵再放開會觸發 MouseDown MouseClick Click MouseUp 四個滑鼠事件 ( 按下滑鼠左鍵才會觸發 MouseClick 或 Click 事件 ) 快按兩下滑鼠鍵再放開, 會觸動 MouseDown MouseClick MouseDoubleClick 和 MouseUp 四個滑鼠事件 ( 另外 Click 和 DoubleClick 事件也會被觸動 ) 在滑鼠事件中是用 e.button 來偵測滑鼠哪個鍵被按或放開 如下 : 1. 按滑鼠左鍵, 則 e.button = Windows.Forms. MouseButtons.Left 2. 按滑鼠中鍵, 則 e.button = Windows.Forms.MouseButtons.Middle 3. 按滑鼠右鍵, 則 e.button = Windows.Forms.MouseButtons.Right 8-9
四 MouseMove 事件 在物件上移動滑鼠時會觸發該物件的 MouseMove 事件 若要取得滑鼠在該物件的 X 座標, 可透過 MouseMove 事件的 e.x 來取得 ; 若要取得滑鼠在該物件的 Y 座標, 可透過 MouseMove 事件的 e.y 來取得 五 MouseEnter MouseLeave 和 MouseHover 事件 當滑鼠游標移動進入物件的範圍內時, 會觸動該物件的 MouseEnter 事件 當滑鼠游標離開物件的範圍內時, 會觸動該物件的 MouseLeave 事件 如果當滑鼠游標移動進入物件的範圍後, 在物件內稍作停留則會觸動該物件的 MouseHover 事件 8-10
範例 8_2_1 使用者移動滑鼠游標時, 圖片會緊貼著游標一起移動 執行結果 8-11
問題分析 1. 可以在表單的 MouseMove 事件中, 設定圖檔的位置 2. 滑鼠位置可以由 e.x 和 e.y 得知 介面設計 屬性預設名稱 Name ( 名稱 ) Size ( 大小 ) Image ( 圖形 ) Picture1 picmove 40,40 ball.gif 8-7
編寫程式碼 第 2-3 行 : 根據 e.y 和 e.x 重設 picmove 位置 8-11
範例 8_2_2 使用者可以用滑鼠拖曳足球圖片 執行結果 8-11~12
問題分析 1. 設定 drag 為全域變數, 作為是否移動 picmove 的根據 2. 設定 down_x 和 down_y 為全域變數, 記錄滑鼠按下時在 picmove 中的座標位置, 以便移動圖片時做位置的調整 3. 在 picmove 的 MouseDown 事件中, 設定 drag 為 True( 可被拖曳 ), 並記錄 down_x 和 down_y 值 4. 在 picmove 的 MouseMove 事件中, 重設定 picmove 的位置 5. 在 picmove 的 MouseUp 事件中, 設定 drag 為 False( 不可拖曳 ) 8-12
編寫程式碼 第 5 行 : 設 drag 為 True( 可拖曳 ) 第 11-14 行 : 若 drag 為 True, 就重設 picmove 的位置 picmove 的 Left 值要減 down_x, 圖片才會在正確位置 ;Top 值亦同 第 17 行 : 在 MouseUp 事件中設 drag 為 False( 不可拖曳 ) 8-13
範例 8_2_3 按鈕內文字原來顯示 請入內參觀! 當使用者移動滑鼠游標進入時, 文字改為 歡迎光臨! 滑鼠游標停留時文字為 歡迎隨意參觀! 按一下滑鼠文字改為 謝謝惠顧! 游標離開時文字為 歡迎再次光臨! 而且每次文字改變時, 按鈕的背景色也會變更 執行結果 8-13~14
問題分析 1. 利用按鈕物件的各種滑鼠事件, 來寫相對的程式碼 2. 背景色用 Color.Yellow 方式來指定系統定義的顏色 8-14
編寫程式碼 8-14~15
8-3 共用事件 撰寫程式有時會遇到許多控制項的事件程序碼都相同, 本節將介紹如何讓這些事件共用一個事件程序 事件程序宣告時, 會使用 Handles 來指定事件是由哪個物件的事件來觸發, 例如按鈕 btn1 的 Click 事件 : Private Sub btn1_click( )Handles btn1.click End Sub 如果我們希望 btn2 和 btn3 的 Click 事件, 能共用 btn1 的 Click 事件, 其程式碼為 : Private Sub btn1_click( )Handles btn1.click,btn2.click, btn3.click End Sub 另外不同類別的控制項或事件也可以共用事件, 如果我們希望 btn2 的 Enter 和 TextBox1 的 TextChanged 事件, 能共用 btn1 的 Click 事件, 其程式碼為 : Private Sub btn1_click( )Handles btn1.click,btn2.enter, TextBox1.TextChanged End Sub 8-15~16
實際加入共用事件的操作步驟如下 : (1) 在程式碼 Handles 物件. 事件 後輸入,, 就會出現物件清單供我們選取, 在物件名稱上快按兩下, 就加入了物件 (2) 接著在物件名稱後輸入., 會出現事件清單供我們選取, 在事件名稱上快按兩下, 就完成共用事件的步驟 (3) 若要再加入其他事件, 就反覆上面兩個步驟即可 8-16
在程式執行中增加共用事件到指定的物件事件, 其語法如下 : 語法 :AddHandler 物件事件 1, AddressOf 物件事件 2 範例 : 讓 btn2 的 Click 事件使用 btn1_click 的事件程序 AddHandler btn2.click, AddressOf btn1_click 說明 : 在程式中新增共用事件時輸入 AddressOf 後, 也會出現清單供我們快按兩下點選使用, 所以該物件事件要先建立 並請注意第一個物件和事件中間, 是用. 相連接 若要確定知道是哪一個物件觸動共用事件時, 就可以在程序中利用 sender.equls 來判斷 例如 btn1 和 btn2 共用一個事件程序, 如果按了 btn1 時 Label1 顯示 快樂 ; 按了 btn2 顯示 Happy, 程式碼寫法為 : If sender.equals(btn1) Then Label1.Text = " 快樂 Else Label1.Text = " Happy End If 8-17
範例 8_3_1 使用者可以輸入三科成績, 輸入時會限制只能輸入數字, 並且同步算出總計 結果 8-17~18
問題分析 1. 要同步顯示總計, 就要將程式碼寫在 TextChanged 事件中 2. 檢查輸入字元是否合法, 程式碼要寫在 KeyPress 事件中 3. 因為三個文字方塊的 TextChanged 事件程式碼相同, 所以可以用共用事件 ( 練習在執行階段指定共用事件 ) 三個 KeyPress 事件程式碼也相同, 所以可以用共用事件 ( 練習在設計階段指定共用事件 ) 8-18
介面設計 屬性預設名稱 Name ( 名稱 ) Text ( 文字 ) Label1 ( 預設值 ) 成績平均試算 Label2 ( 預設值 ) 國文成績 : Label3 ( 預設值 ) 英文成績 : Label4 ( 預設值 ) 數學成績 : Label5 lbltotal 成績總計 : TextBox1 txtchi ( 預設值 ) TextBox2 txteng ( 預設值 ) TextBox3 txtmath ( 預設值 ) 8-18
編寫程式碼 第 2-3 行 : 在程式執行階段用 AddHandler 敘述指定共用事件 第 5 行 : 在設計階段指定共用事件 8-19
8-4 功能表 MenuStrip 功能表對於功能眾多的大型應用程式, 例如 Word,Excel 等都是非常重要, 它將功能分門別類放置在下拉式清單中, 需要時才取用非常節省版面空間 Windows Form 工具箱提供兩個和功能表相關的工具, 分別是 MenuStrip 功能表和 Contex MenuStrip 快顯功能表 MenuStrip 控制項可以在設計階段或執行階段中建立功能表, 但一般功能表都是在設計階段便已經事先設計好, 程式執行時才使用 功能表上面建立的主功能項目或子功能項目, 均稱為 MenuItem 物件 8-19~20
一 建立功能表控制項 1. 建立功能表控制項 : 在工具箱中 MenuStrip 功能表控制項工具上快按兩下, 就會在表單正下方建立出一個 MenuStrip 控制項 2. 建立功能表項目 : 當選取 MenuStrip 控制項時, 表單的標題欄正下方會出現 在這裡輸入 的提示 在提示上按一下就可以輸入功能項目 譬如 : 要建立 方向 功能選項, 就輸入 方向 文字, 建立的 MenuItem 物件會以功能項目名稱後面加上 ToolStripMenuItem 當預設物件名稱 接著繼續在 方向 功能下方設定 由右向左 由左向右 兩個子功能項目 如果希望用快捷鍵啟動功能項目, 可以輸入 由右向左 (&R), 會顯示為 由右向左 (R) 然後如下圖設定該功能項目的 ShortcutKeys 屬性值, 程式執行時若按 Ctrl+R 鍵, 就等於點選該選項 8-20
一 建立功能表控制項 3. 修改 MenuStrip 控制項和 MenuItem 物件屬性 : 在 MenuStrip 控制項或 MenuItem 物件上按一下, 就可以在屬性視窗中修改該功能項目的屬性值 4. 插入功能項目 : 譬如 : 欲在下圖 藍色字 灰背景 兩個功能項目中間插入一個分隔棒 其操作方式是移動滑鼠到 灰背景 上壓滑鼠右鍵, 如左下圖由快顯功能表中選取 插入 Sparter 功能, 結果如右下圖所示 如果想插入新的功能項目則選取 插入 MenuItem 功能 如果想刪除某一個功能項目, 只要在該項目上壓滑鼠右鍵, 由快顯功能表中選取 刪除 功能即可 8-20
二 MenuItem 常用屬性 屬性說明 Text 功能項目上面顯示的文字內容 Enabled 設定功能項目是否能被點選 預設值為 True ShowShortcutKeys ShortcutKeys 三 MenuItem 常用事件 設定是否將功能表項目的快速鍵顯示在該項目上 預設值為 True 可以由清單中選擇功能鍵做為快捷鍵 Click 事件 : 當使用者點選功能項目時, 會觸動該項目的 Click 事件, 所以我們會將執行該功能的程式碼寫在 Click 事件中 8-21~22
範例 8_4_1 使用者可以由功能表設定跑馬燈的方向 字體和背景顏色 結果 8-22
問題分析 1. 將標籤放在面板中, 標籤超出面板的部份不會顯示 再使用計時器來控制標籤的顯示位置, 就可以達到跑馬燈的效果 2. 使用 MenuStrip 功能表, 設計功能表選項 8-22
介面設計 8-23
編寫程式碼 第 1 行 : 設 direction 為全域變數, 紀錄標籤移動的方向 第 3-5 行 : 在 Form1 表單的 Load 事件中預設初值, direction=true 表標籤由右向左移 第 9-10 行 : 當 direction=true, 則標籤 Left 值遞減, 若超過面板就從最右重新開始 第 12-13 行 : 當 direction=false, 則標籤 Left 值遞增, 若超過面板就從最左重新開始 8-23~24
編寫程式碼 在功能表選項的 Click 事件中, 寫入相關設定前景色和背景色的程式碼 8-24~25
8-5 快顯功能表 ContextMenuStrip ContextMenuStrip 快顯功能表控制項, 程式執行時可以在特定控制項上按右鍵, 就會出現快顯功能表 快顯功能表中列出該控制項常用的功能, 對使用者而言是非常貼心的設計 建立 ContextMenuStrip 快顯功能表控制項和 MenuStrip 功能表控制項方式是大致一樣 8-25
一 建立 ContextMenuStrip 快顯功能表控制項 1. 建立 ContextMenuStrip 控制項 : 在工具箱中的 ContextMenuStrip 工具上快按兩下, 就會在表單正下方建立出一個 ContextMenuStrip 控制項 2. 建立功能表項目 : 當選取 ContextMenuStrip 控制項時, 表單的標題欄下面會出現 ContextMenuStrip 供輸入功能項目 建立功能項目的方法和 MenuStrip 相同, 只是程式執行時並不會顯示在標題欄下面 8-26
一 建立 ContextMenuStrip 快顯功能表控制項 3. 修改 MenuItem 物件屬性 : 在 MenuItem 物件上按一下, 就可以在屬性視窗中修改該功能項目的屬性值 4. 指定對應 ContextMenuStrip 控制項 : 例如想對表單上 Button1 按鈕控制項加上 ContextMenuStrip1 快顯功能表 其做法是按 Button1 控制項 ContextMenuStrip 屬性的下拉鈕, 由清單中選取 ContextMenuStrip1 控制項即可 程式執行時只要在 Button1 控制項上按右鍵, 就會出現快顯功能表 8-26
二 MenuItem 常用方法 ADD 方法 :ContextMenuStrip 控制項可以在程式執行階段再新增選項 例如在 ContextMenuStrip1 控制項中加入 新增 功能項目, 其寫法如下 : ContextMenuStrip1.Items.Add(" 新增 ") 8-27
三 MenuItem 常用事件 1. Opening 事件 : 當使用者按右鍵要顯示快顯功能表前, 會先觸動該控制項所對應 ContextMenuStrip 控制項的 Opening 事件 因為此時功能表尚未開啟, 若希望 ContextMenuStrip1 控制項的 tsmopen 功能項目設為失效, 也就是將 Enabled 屬性設為 False 設定完成後, 當我們壓滑鼠右鍵開啟快顯功能表時, 該項目便無法被選取, 我們可以將快顯功能表初始化的程式碼寫在 Opening 事件程序中, 其寫法如下 : Private Sub ContextMenuStrip1_Opening(ByVal sender EventArgs) Handles ContextMenuStrip1.Opening OpenToolStripMenuItem.Enabled = False End Sub 2. Click 事件 : 當使用者點選功能項目時, 會觸動該項目的 Click 事件, 所以我們會將執行該功能的程式碼寫在 Click 事件中 8-27
範例 8_5_1 當使用者在貓咪上按右鍵時, 會出現快顯功能表來設定貓咪要追逐滑鼠 坐下或睡覺 ( 預設為追逐 ) 結果 8-27~28
問題分析 1. 建立 ContextMenuStrip 控制項, 有 追逐 坐下 睡覺 項目 2. 建立一個 PictureBox 控制項, 將 ContextMenuStrip 屬性指定到前面建立的快顯功能表控制項 3. 建立一個 ImageList 控制項, 將貓咪追逐 (run1,run2) 坐下 (sit1,sit2) 睡覺 (sleep1,sleep2) 各兩張 gif 圖檔依序加入 4. 建立一個 Timer 控制項, 來切換圖檔 8-28
介面設計 8-28~29
編寫程式碼 第 1 行 : 設 run 為全域變數, 來紀錄 picmove 是否要隨滑鼠移動 第 2 行 : 設 kind 為全域變數, 來紀錄使用者點選追逐 ( 值為 0) 坐下 (1) 或睡覺 (2) 設 pic 為全域變數, 來紀錄顯示的圖片是第 1 張 ( 值為 0); 還是第 2 張 (1) 第 6-16 行 : 快顯功能表三個項目的共用事件, 利用 sender.equals() 來分別設定不同的條件 8-29
編寫程式碼 第 18 行 : 因為圖片只有兩張輪流切換, 所以 pic 每次加 1 但當值為 2 時就改設為 0, 也就是 pic 的值是 0 和 1 輪流切換 第 19 行 : 因為 ImageList 的圖檔索引值是由 0-5, 0 1 是放追逐圖片 ;2 3 是坐下 ;4 5 是睡覺只有兩張輪流切換 所以將 kind(0-2) 的值乘於 2, 加上 pic(0-1) 的值, 就正好和 ImageList 的圖檔索引值相對應 8-30
8-6 工具列 ToolStrip ToolStrip 工具列控制項, 是以視覺化的圖示來取代文字功能表, 感覺比較直覺 當我們在表單上建立 ToolStrip 控制項時, 預設置於表單的上方, 如果同時建立有 MenuStrip 功能表則緊接在功能表的正下方 透過 ToolStrip 可很容易自訂工具列, 由於 ToolStrip 控制項是屬於容器控制項, 其中可容納 Button Label SplitButton DropDownButton Seperator ComboBox TextBox ProgressBar 等 ToolStrip 控制項提供的物件 如下圖所示可按下拉鈕, 在由清單中點選需要的物件 8-31
一 建立 ToolStrip 工具列控制項 1. 建立 ToolStrip 控制項 : 由工具箱中點選 ToolStrip 圖示, 在表單標題欄正下方產生工具列控制項 2. 建立功能表項目 : 點選工具列控制項中圖示的下拉清單按鈕, 如下圖出現元件清單, 預設名稱為 ToolStripButton1 例如點選 Button 後, 會在工具列控制項保留一個按鈕圖示的位置 8-26
一 建立 ToolStrip 工具列控制項 3. 另一種建立工具列圖示方式是採用 項目集合編輯器, 其操作方式是先點選工具列控制項 ( 無圖示處 ), 接著在屬性視窗中選取 Items, 進入如下圖的 項目集合編輯器 4. 繼續新增工具按鈕 5. 若欲刪除工具列的圖示可以在圖示上壓滑鼠右鍵, 選取 刪除 直接刪除 或是進入 項目集合編輯器 選取圖示後按 X 刪除 透過上下鈕調整圖示的順序 8-32
二 ToolStripButton 工具圖示常用屬性 Text DisplayStyle 屬性說明 TextImageRelation Image ToolTipText 設定工具列上面的按鈕工具所顯示的文字, 預設名稱為 ToolStripButton1 設定工具按鈕呈現的方式, 其值有 None Text Image Image And Text, 預設值為 Image 設定文字和圖片的相關位置 其值為 : 1.ImageBeforeText: 圖片在文字之前, 為預設值 2.TextAboveImage: 圖示在文字下方 3.TextBeforeImage: 圖示在文字之後 4.ImageAboveText: 圖示在文字上方 設定在工具列圖示上面的圖案 設定當滑鼠移到工具列按鈕上顯示的提示文字 8-33
三 ToolStrip 控制項常用屬性 屬性說明 Items Size 設定 ToolStrip 控制項中工具列按鈕的集合 設定工具列的大小, 預設值為 (292,39) 設定 ToolStrip 控制項在表單的位置, 預設值為 Top ( 在表單的上方 ) Dock 8-33
四 ToolStrip 常用事件 Click 事件 : 當使用者按 ToolStrip 控制項的工具圖示上按一下, 會觸動該圖示名稱的 Click 事件, 可將要處理事情的程式碼寫在該事件程序內 若有些圖示作相同的事情可透過共享是件方式來處理 8-34
範例 8_6_1 利用工具按鈕可以切換六張圖片 執行結果 8-34
問題分析 1. 可在 ToolStrip 控制項上建立四個 ToolStripButton, 分別作為 第一張 前一張 下一張 和 最後一張 程式碼就寫在 ToolStripButton 的 Click 事件中, 而且可以共用一個事件程序 2. 使用 ImageList 來存放六張風景圖檔, 在用另一個 ImageList 來存放四張 ToolStripButton 的圖示檔 8-34
介面設計 8-35
編寫程式碼 第 1 行 : 設 num 為整數全域陣列, 記錄目前秀圖是第幾張 第 3-4 行 : 在執行階段指定 ToolStripButton 的圖檔 8-35~36
編寫程式碼 第 9-27 行 : 是四個 ToolStripButton 的共用事件, 利用 sender.equals 來判斷是哪個 Button 被按 8-36