1、KeyPress事件
4、如何判斷控制鍵(Shift、Ctrl、Alt)按下狀態
有三個重要的符號常量:vbShiftMask - 1(001)、vbCtrlMask - 2(010)、vbAltMask - 4(100)
(1)Shift = 1(001):只按下Shift鍵
(2)Shift = 2(010):只按下Ctrl鍵
(3)Shift = 4(100):只按下Alt鍵
(4)Shift = 3 = 1 + 2(011):按下Shift鍵與Ctrl鍵
(5)Shift = 5 = 1 + 4(101):按下Shift鍵與Alt鍵
(6)Shift = 7 = 1 + 2+ 4(111):按下Shift鍵、Ctrl鍵與Alt鍵
案例:利用窗體KeyDown事件,按下組合鍵Ctrl+A時,彈出消息框,內容「全部選定!」
運行程序,按下Ctrl+A組合鍵:
(二)鼠標事件
1、MouseDown事件
(1)觸發條件
按下任意鼠標按鈕時發生。
(2)過程格式
2、MouseUp事件
(1)觸發條件
釋放任意鼠標按鈕時發生。
(2)過程格式
3、MouseMove事件
(1)觸發條件
每當鼠標指針移動到屏幕新位置時發生。
(2)過程格式
(1)Button = 1(001):只按下鼠標左鍵
(2)Button = 2(010):只按下鼠標右鍵
(3)Button = 4(100):只按下鼠標中鍵
(4)Button = 3 = 1 + 2(011):按下鼠標左鍵和右鍵
(5)Button = 5 = 1 + 4(101):按下鼠標左鍵和中鍵
(6)Button = 7 = 1 + 2+ 4(111):按下鼠標左鍵、中鍵和右鍵
方法二、利用VB的過程添加工具生成過程框架,然後編寫過程體。
2、創建Sub過程,名爲IsPrimeNumber,包含兩個參數
3、編寫【列舉】按鈕單擊事件處理代碼
4、編寫【清空】按鈕單擊事件處理代碼
5、運行程序,測試效果
輸入起始數與終止數,單擊【列舉】按鈕:
爲什麼先輸出3,再輸出6?過程調用使用棧結構,先進後出。
1、創建工程,更名爲「求解漢諾塔問題」,添加控件,設置屬性
2、聲明變量,編寫通用過程與兩個按鈕單擊事件處理代碼
3、運行程序,查看效果
輸入環個數,比如3,單擊【求解】按鈕:
三、Function過程
1、定義Function 過程
(1)過程格式
[Public|Private][Static] Function 函數名 ([形參表])_ [As 數據類型]
語句組End Function
注意:VB不像C、Java、VFP的函數,通過return語句來返回函數值,而是通過函數名變量來返回函數值。
這裏演示一下Java裏定義的階乘函數factorial(n):
運行程序,單擊【判斷】按鈕:
案例:用遞推法和遞歸法編寫階乘函數過程
運行程序,測試兩種方法的階乘函數:
選擇題真題演練:
循環初始條件:i=1,循環條件:i< 6,因此循環5次。
No.1 i=1,s=0+1/(1+1)=1/2 (此時可以排除A與B)
因爲要循環5次,所以應該有5項數據相加,於是排除C,選擇D。
四、傳遞參數
2、按地址傳遞參數
案例:編寫交換兩個變量值的過程Swap(x, y)
1、創建工程,更名爲「利用地址傳遞交換變量值」,添加按鈕,設置屬性
2、創建交換變量值的通用過程Swap(x, y)與按鈕單擊事件處理代碼
3、運行程序,單擊【交換】按鈕,查看結果
給通用過程Swap的兩個參數前加上ByRef,顯式聲明爲引用傳遞,即地址傳遞方式。
運行程序,單擊【交換】按鈕,你會看到結果完全相同。
選擇題真題演練:
我們將按鈕Command1的單擊事件處理代碼修改一下:
3、按值傳遞參數
按值傳遞參數是把實參變量的值傳遞給形參變量,實參變量的值在過程調用前後保持不變。定義過程時用ByVal關鍵字指出參數是按值來傳遞的。
如果將上述案例中Swap過程的參數改爲按值傳遞,那麼就無法實現交換變量值的功能。
選擇題真題演練:
靜態數組和動態數組都可以作爲過程的參數。
案例:演示數組作爲過程參數,求傳入數組的元素之和。
1、創建工程,更名爲「演示數組作爲過程參數」,添加按鈕,設置屬性
2、編寫通用過程Sum()和按鈕單擊事件處理代碼
3、運行程序,查看效果
選擇題真題演練:
假如函數fun1的參數m採用傳值方式,那麼結果又該是多少呢?
2、編寫兩個通用過程和一個按鈕單擊事件過程
3、運行程序,查看效果
單擊【確定】按鈕:
真考題庫試卷(3)第(32)題也涉及到控件參數。
運行程序,測試效果:
單擊圖片框:
明明在工程目錄裏有「pic.jpg」文件,爲啥不能加載呢?必須添加一個路徑:
此時再運行程序,單擊圖片框:
單擊標籤:
除了用TypeOf函數判斷控件類型之外,還可以用TypeName函數來判斷。