版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、Visual Basic 程序設計入門 5.1 Visual Basic 程序的組成 1) 工程文件 .vbp 2) 窗體文件 .frm 和 .frx: 每個窗體(Form)對應于兩個文件,.frm文件實際上就是純文本文件,描述了窗體位置,各個控件名稱,位置等信息,以及所有的函數(shù)。 .frx文件是二進制文件,存放窗體中的圖片,圖標等資源。這兩個文件一般不需要直接去操作它 3) 代碼模塊文件 .bas 一個工程中可以有任意多個代碼模塊文件,里面可以定義所有窗體都能使用的全局變量,全局函數(shù) 4) 類模塊文件 .cls 如果要寫一個類,那么應該將類寫在一個類模塊文件里。一個 .cls 文件可以包含多
2、個類,一個工程里可以有任意多個 .cls文件,VB的程序一般是由一個個窗體(Form)構成,當然也可以沒有任何窗體。窗體、模塊、類模塊都不是一定要有的。但顯然不能都沒有。,5.2 Visual Basic 的 sub 和 Function VB中的函數(shù)有 Sub 和 Function 兩種,前者沒有返回值,后者有。為簡單起見,我們都稱之為函數(shù)。例如: Sub PrintMsg(ByVal szMsg As String) If szMsg = Then Exit Sub 從 sub中返回 Else MsgBox szMsg End If End Sub 調用語句: PrintMsg “Hell
3、o,world”,Function Max(ByVal a As Long, ByVal b As Long) As Long 該函數(shù)返回值類型是long If a b Then Max = a Else Max = b End If End Function 調用語句: c = Max(3,5) 用到了返回值 或 Max 3,5 不用返回值,5.3 參數(shù)的傳遞方式 VB中參數(shù)傳遞方式有傳值和傳引用兩種。傳值的參數(shù)在定義的時候使用 byval 關鍵字 例如: Sub Func(ByVal a As Long, b As Long, ByVal asz As String, bsz As Str
4、ing) a = 1 b = 1 asz = Hello bsz = Hello End Sub,Private Sub Command1_Click() Dim a As Long, b As Long Dim asz As String, bsz As String a = 0 b = 0 asz = Ok bsz = Ok Func a, b, asz, bsz MsgBox a 彈出 0 MsgBox b彈出 1 MsgBox asz 彈出 Ok MsgBox bsz彈出 Hello End Sub,5.4 Visual Basic 程序的執(zhí)行 VB程序可以從某一個Form的 Form
5、_load 函數(shù)開始執(zhí)行,也可以從某個代碼模塊的 Sub main () 函數(shù)開始執(zhí)行。Sub main() 函數(shù)只能有一個。 在VB的“工程 | 屬性”菜單里可以進行啟動設置。 Form_load 函數(shù)(如果你寫了的話)在Form裝入內存時被調用,此時Form還沒有被顯示出來 在代碼模塊和在Form中,都可以裝載某個Form并將它顯示出來。,一個有兩個Form和一個代碼模塊的VB程序的例子: 文件 mymain.bas Sub main() Load Form1 裝入Form1,Form_load 會在此時被調用 Form1.Show 顯示它 End Sub 文件 form1.frm: Pr
6、ivate Sub Command1_Click() Load Form2 Form2.form_load 會在此時被調用 Form2.Show 1 Show 1表示只要 Form2在就不能點擊Form1 End Sub,使用 unload 窗體名 語句來卸載一個窗體 如果卸載的窗體是自己,那么可以用 unload me 語句,5.5 Visual Basic 的變量類型及變量定義 VB 中最基本的變量類型有: Integer 16字節(jié) long 32 字節(jié) Byte 8字節(jié) double 8字節(jié) String 字符串 VB中,變量可以不聲明就直接使用。但強烈建議不要這么做。應該在每個Form
7、文件和每個代碼模塊文件的開頭加 Option explict ,告訴編譯器,我不希望允許變量沒聲明就能使用.,VB 中的變量用 dim 語句定義 Dim n as long Dim f as double Dim szName as string, szId as string szName = “ Myname is ” + szId,. VB 中的數(shù)組 Dim MyArray(20) as long 實際上該數(shù)組有21個元素,MyArray(0) MyArray(20) 訪問數(shù)組元素: MyArray(0) = 1 多維數(shù)組 Dim Matrix(10, 10) As Long Matri
8、x(0, 0) = 1 字符串數(shù)組 Dim StringArray(10) as string StringArray(0) = “This”,. 動態(tài)數(shù)組 Dim MyArray() as long Redim MyArray(30) 動態(tài)分配空間 MyArray(2) = 1 使用 Redim MyArray(50) 重新分配空間 MyArray(2) = 5 Redim Preserve MyArray(60)重新分配空間并保持其 原有內容 Erase MyArray 釋放動態(tài)數(shù)組,. VB中的字符串 Dim szName as string szName = szName + “thi
9、s” Dim szAge as string * 30 szAge = “this” szName = Trim(szAge) 對字符串操作有 Trim,Ltrim,Rtrim 截斷操作 Left,Right,Mid 取子串操作 Val 字符串轉換為數(shù)值 Str 數(shù)值轉換為字符串 等函數(shù),VB中沒有Char類型,所以不能取字符串中的某個字符 來進行操作,只能取長度為1的子串 Asc 字符轉換為ASCII碼 Chr Ascii碼轉換成字符 這樣的函數(shù)轉換的對象或轉換的結果也是長度為1的字符串。 如: Asc(“I”) Dim sz as string Sz = Chr(80),5.6 VB中變量
10、和函數(shù)的作用域 1)在一個函數(shù)中定義的變量,只能在這個函數(shù)中使用 2)在一個窗體中,所有函數(shù)的外面定義的變量,可以被這個窗體中的所有函數(shù)使用。如果用public關鍵字來定義,則還在其他地方以 “窗體名.變量名” 的方式使用。函數(shù)也一樣。比如某窗體 MyForm1 中有 Public a as long Public sub MyMsg() End sub 那么在該窗體以外,可以通過 MyForm1.a MyForm1.MyMsg 方式來使用,前提是 MyForm1 已經(jīng)被裝入,3) 在一個代碼模塊中定義的變量,如果用 dim 定義,那么 只能在這個代碼模塊中使用,如果用 global 定義,那
11、么可以在所有代碼模塊和窗體中使用。 比如 Global g_nAge as long 4)在一個代碼模塊中定義的函數(shù),可以在所有代碼模塊和窗體中調用,除非前面使用了private關鍵字 4)類模塊中定義的類,可以在所有窗體和代碼模塊中使用,5.7 VB窗體的基本屬性和事件 1)屬性: caption 標題欄文字 backcolor 背景色 borderstyle 邊框類型 (固定,可變,沒有) ShowInTaskbar 是否在任務欄顯示 StartUpPosition 起始位置(設計時,屏幕中央.) Keypreview 是否優(yōu)先于控件而獲得鍵盤消息,2)事件: Load 裝載窗體時發(fā)生 K
12、eydown 鍵盤按下時發(fā)生 resize 窗口大小變化時發(fā)生 Activate 窗口由不活躍變?yōu)榛钴S時發(fā)生 ,5.8 各種控件一般都有的屬性 Enabled 是否可以點 Visible 是否可見 Left,Top,Width,Height 位置和大小 Font 字體 ,5.9 常見控件用法 見例子程序 MSDN9898VS2052SamplesVB98Controls,5.9 常見控件用法 5.9.0 許多控件都共有的屬性、方法和事件 共有屬性: Name : 名字 (運行是也可以讀?。?Left, Top, Width, Height 位置 Visible : 是否可見 Enabled :
13、 是否有效 ForeColor : 前景色(字的顏色) BackColor : 背景色 BorderStyle : 邊框樣式(有,無) Apperance : 是否三維效果 ToolTipText : 提示文字 Font : 字體 FontName : 字體名字,FontBold : 是否粗體字 FontSize : 字體大小 FontUnderline : 是否下劃線 FontItalic : 是否斜體 TabStop : 是否能通過 Tab鍵切換到 TabIndex : Tab鍵切換時的順序 Value : 卷滾條代表的值,進度條代表的進度值 單選框、多選框是否選中 MousePointe
14、r : 鼠標樣子 若值為 Custom 則還須 MouseIcon 屬性來指定鼠標樣子( .cur 文件時光標文件) Tag : 標記字符串,共有方法: Move : 移動位置和調整大小 Refresh : 刷新顯示 SetFocus : 設置輸入焦點 共有事件: Click : 鼠標點擊 DblClick : 鼠標雙擊 GotFocus : 獲得輸入焦點 KeyDown : 鍵按下 KeyUp : 鍵松開 KeyPress : 字母,數(shù)字鍵敲擊 MouseDown : 鼠標按下 MouseUp : 鼠標松開 MouseMove : 鼠標移動,5.9.1 靜態(tài)文本控件 Label (非窗口)
15、屬性: Capiton : 文字 AutoSize : 自己根據(jù)文字調整大小 Backcolor : 背景色 Backstyle : 背景是否透明 BorderStyle : 有無邊框 ForeColor: 文字顏色 WordWrap : 是否自動折行 Aligment : 文字靠左 ,居中,還是靠右 事件: Click, MouseDown 等,5.9.2 按鈕控件 CommandButton 屬性: Capiton : 文字 Cancel : 為true 則按ESC鍵就相當于點擊它 Default :為true 則按回車鍵就相當于點擊它 Style : 圖形模式或是字符模式 Picture
16、 : 圖形 DownPicture : 按下時圖形 DisabledPicture : 不能點時的圖形 事件: Click 等,5.9.3 定時器控件 Timer 屬性: Interval : 引發(fā) Timer事件的時間間隔(單位:毫秒) Enabled : 是否在記時,即是否會引發(fā)Timer事件 事件: Timer,5.9.4 圖片控件 PictureBox 屬性: AutoSize : 根據(jù)圖像自動調整大小 Picture : 圖片 hDC : 設備描述表句柄 hWnd : 窗口句柄 方法: Refresh : 刷新(即引發(fā) Paint事件) TextWidth : 求給定文字串的寬度 T
17、extHeight : 求給定文字串的高度 事件: Paint : 重畫 重要特點:是一個窗口,可在上面放置其他控件 相關函數(shù): LoadPicture 從文件裝入圖像,5.9.5 圖像控件 Image 屬性: Picture : 圖像 和圖片控件區(qū)別在于它不是一個窗口,不能在上面放置其他控件,沒有窗口句柄和設備描述表, 因而比圖片控件節(jié)省資源。如果僅為顯示一副圖,應該使用圖像控件 相關函數(shù): LoadPicture 從文件裝入圖像,5.9.6 卷滾條控件 VscrollBar 和 HScrollBar 屬性: Value : 卷滾條代表的數(shù)值 Min : 卷滾到最左(上)時代表的數(shù)值 Max
18、 : 卷滾到最右(下)時代表的數(shù)值 SmallChange : 點兩端引起的數(shù)值變化量 LargeChange : 點中間引起的數(shù)值變化量 事件: OnChange : 數(shù)值發(fā)生變化引發(fā) OnScroll : 拖動滑塊時引發(fā),5.9.7 控件數(shù)組 幾個同類型的控件,可以名字一樣,形成一個數(shù)組 這個數(shù)組可以是設計時就做好,也可以運行時, 通過 Load 語句動態(tài)生成 每個數(shù)組元素都有一個下標 Index 同一數(shù)組元素共用相同的各類事件處理函數(shù),函數(shù)有一個參數(shù) index 指明了事件發(fā)生在那個控件上,5.9.8 對話框控件 CommonDialog 用來實現(xiàn)文件,字體,顏色,打印機設置等對話框 屬
19、性: Flag: 一些標志 FileName : 通過文件對話框獲取的文件名 InitDir : 文件對話框的初始路徑 Filter : 文件對話框的過濾器 FontName : 通過字體對話框獲得的字體名字 FontBold : 字體是否粗體 FontItalic: FontUnderline: Color : 通過顏色對話框獲得的顏色 方法:ShowOpen, ShowSave,ShowFont, ShowColor, ShowPrinter, ShowHelp,5.9.9 編輯框控件 TextBox 屬性: Text : 文字 MultiLine : 是否多行 SelStart : 選中
20、文字的開始點 Locked : 能否編輯 ScrollBars : 是否要卷滾條 SelStart : 選取部分的起點 SelLength : 選取部分的長度 SelText : 選中部分的文本 Passwordchar : 輸密碼方式下的替代字符 方法: SetFocus : 設置輸入焦點 事件: Change :內容改變時發(fā)生,哪怕內容改變是被程序改變的,也會引發(fā),5.9.10 列表框控件 ListBox 屬性: Columns : 列數(shù) List : 數(shù)組,存放列表框里面的內容 MultiSelect : 是否允許多選( 不能多選,簡單多 選方式,擴展多選方式) Sorted : 是否排
21、序 Style : 表項邊上是否有檢查框 ListIndex : 被選中項的索引(索引從0算起) ListCount : 總項目數(shù) Selected : 某一項是否被選中 SelCount : 被選中的項目總數(shù) ItemData : 每個項目都可以有一個任意的整數(shù)Id, 存放在 ItemData 數(shù)組里,也可以不管它 NewIndex :最后添加的表項索引,方法: AddItem : 添加一項 RemoveItem : 刪除一項 Clear : 清空,添加表項及其ID: List1.AddItem Judy Phelps List1.ItemData(List1.NewIndex) = 423
22、10 獲取被選中表項的索引: dim n as long n = List1.ListIndex 輸出被選中表項: Msgbox List1.List(list1.listIndex) 判斷索引為 2 的表項是否被選中: if List1.Selected(2) then Endif 選中某項: List1.Selected(2) = true,5.9.10 列表框控件 ListBox 事件: Click : 點擊一項時發(fā)生。用程序選中一項,也會引發(fā) DblClick Scroll : 拉動卷滾條時發(fā)生 ItemCheck : 選中一個表項的 checkbox 時產(chǎn)生,不論是用戶選中還是用程序
23、指令選中,5.9.11 下拉列表框控件 屬性: Style : Drop Down Combo : 下拉,而且有編輯框 Simple Comobo: 有編輯框,但不能下拉 Drop down list : 沒有上面的編輯框 ListIndex : 被選中的列表項 Text : 編輯框里的文字 Sorted : 是否排序 SelStart, SelLength, SelText 關于編輯框里文字的屬性,方法: AddItem : 添加表項 事件: Click : 在列表中做選擇時發(fā)生,程序改變被選中項時也會引發(fā) Change : 編輯框內容改變時發(fā)生,即使是程序使之改變,也會發(fā)生 (前面提到的
24、編輯框控件的 Change 事件,也是一樣的),5.9.12 進度條控件 點 工程 | 部件 菜單后,選 Microsoft Common Controls 6.0 添加后,才有 屬性: Max : 能表示的最大值 Min : 最小值 Value : 值 Scrolling : 是連續(xù)顯示還是分段顯示,5.9.13 狀態(tài)欄控件 點 工程 | 部件 菜單后,選 Microsoft Common Controls 6.0 添加后,才有 屬性: Align : 對齊方式 Panels : 面板集合 事件: PanelClick : 點擊其中面板時發(fā)生,5.9.14 驅動器列表控件,屬性: Drive
25、: 字符串,表示當前盤符 事件: Change : 點擊選擇一個盤時發(fā)生,5.9.15 文件列表控件,屬性: Path: 當前路徑 事件: Change : 雙擊一個文件夾時發(fā)生 click: 單擊一個文件夾時發(fā)生,5.9.16 樹形控件,5.9.17 分頁控件,5.9.18 ListView控件,5.9.19 ImageList控件,5.9.20 RichText 控件,. 鼠標和鍵盤消息處理 . 調用動態(tài)連接庫 . 處理其他消息,各種控件及其消息: . 編輯框: 控制消息: EM_ 開頭,比如 通知碼: . 列表框: 控制消息: 通知 . 卷滾條: 可以通過對編輯框發(fā)送一系列以 EM_ 開
26、頭的消息來控制編輯框 . 組合框: . 列表框控件補充: 可以通過對列表框發(fā)送一系列以 LB_ 開頭的消息來控制列表框,5.10 VB和VC混合編程 這里指的混合編程,就是指在VB程序中調用用VC編寫的動態(tài)鏈接庫 一些需要講究時間效率的操作,一些用VB難以實現(xiàn)的操作,都可以用VC來編寫成 dll,然后在VB 程序中進行調用,5.10.1 什么叫“動態(tài)鏈接庫” 動態(tài)鏈接庫: .dll 是能夠被多個 exe 所共享的代碼和數(shù)據(jù)的。里面可以包含變量,函數(shù),資源. 所謂“動態(tài)鏈接庫”,和“靜態(tài)鏈接庫”( 一般是 .lib 文件) 不同。后者中的代碼,會在鏈接形成可執(zhí)行程序的時候就被“復制”到 exe
27、文件中去,該 exe 文件運行時不再需要那些lib文件。 而動態(tài)鏈接庫中的代碼,不會在形成可執(zhí)行文件的時候被“復制”到exe文件中去,在該可執(zhí)行文件運行時,才將該 dll 從硬盤里裝入。如果該 Dll 已經(jīng)在內存,那么就不需要裝入,而是引用記數(shù)加1,當調用DLL的程序結束時,該DLL會從內存中卸載。但是如果還有別的程序在使用該DLL,則該DLL引用記數(shù)減1 DLL的引用記數(shù)是Windows記錄的,用來表示一個DLl當前有幾個進程在用。如果引用計數(shù)為0,那么該DLl就會被從內存中卸載,在Windows中引入“動態(tài)鏈接庫”機制的目的,是節(jié)省內存。比如幾乎所有的Windows API函數(shù)都是存放在動
28、態(tài)鏈接庫里的,每個Windows程序都會用到這些函數(shù),然而在內存里只需要保留一份這些函數(shù)的代碼就可以了。 大部分API函數(shù)都在以下三個 Dll 中: 窗口函數(shù): User32.dll 畫圖函數(shù): gdi32.dll 一些核心函數(shù),比如內存分配,進程調度等: Kernel32.dll,5.10.2 在VC中以C語言編寫動態(tài)鏈接庫 新建一個 Win32 Dynamic-Link Library 工程,選Empty Dll 在 .c 文件中編寫函數(shù) 要寫一個 DllMain 函數(shù),Dll被裝入內存時先執(zhí)行DllMain函數(shù) 需要在VB中調用的函數(shù),前面加 WINAPI 聲明 3) 編寫一個.def
29、文件, 將VB程序中需要調用的函數(shù)“導出” 4) 往工程里添加 .def 和 .c文件,5.10.3 在VB中調用動態(tài)鏈接庫中的函數(shù) 用Declare 語句聲明函數(shù)后,即可在VB中調用。要注意參數(shù)的類型匹配問題。 Declare sub 用于聲明返回值為 void 的函數(shù) Declare function 用于聲明有返回值的函數(shù),格式: Declare Sub “函數(shù)別名” lib “dll文件名” Alias “dll中函數(shù)真正的名字” ( 參數(shù)表 ) Declare function “函數(shù)別名” lib “dll文件名” Alias “dll中函數(shù)真正的名字” ( 參數(shù)表 ) as 返回
30、值類型 Alias “dll中函數(shù)真正的名字” 也可以沒有,這樣的話“函數(shù)別名”就應該和函數(shù)在 Dll 中的真正名字一樣,例: public Declare Function SendMessage Lib user32 Alias SendMessageA (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Private Declare Function GetDC Lib user32 (ByVal hwnd As Long) As Long Privat
31、e Declare sub MyFunction lib “Mydll.dll” (ByVal name as string ) 一般來說,declare語句出現(xiàn)在模塊文件里,前面就加Public, 出現(xiàn)在窗體文件里,前面就加Private 函數(shù)名的大小寫是重要的,不能亂寫,VB程序第一次執(zhí)行到調用DLL 中的函數(shù)的語句時,該DLl才被裝入內存(DllMain函數(shù)被執(zhí)行)。此時該DLL文件必須位于程序的當前路徑下,或是在Windows的 系統(tǒng)文件夾下(Win9x: system, Winxp/2000: system32 ),否則會報找不到 dll 文件的錯誤,程序中止 VB程序結束時,dll 被從內存卸載,還是會執(zhí)行DllMain函數(shù) 哪怕實際上只是更改引用計數(shù),DLLMain也總是會被執(zhí)行的。,5.10.4 VB 和C+混合編程 用VC寫了一個類,但是這些類沒法在VB中直接使用,怎么辦? 需要通過為這個類編寫VB能夠調用的接口來解決。 編寫一個創(chuàng)建對象的輸出函數(shù),返回對象的“句柄” 然后為該類的每個成員函數(shù)都編寫一個相應的輸出函數(shù),作為在VB中調用的接口,該函數(shù)接受一個“對象句柄”作為參數(shù) 還要編寫一個銷毀對象
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年房地產(chǎn)投資的法律規(guī)定與合規(guī)體系
- 2025年衛(wèi)生院崗前人事考試試題及答案
- 2025年傳感器筆試題目及答案
- 2025年陜西年底人事考試及答案
- 2025年永定縣教師編制筆試及答案
- 2026年工程結構非線性分析的案例分析
- 2025年北師大文字學博筆試及答案
- 2025年張家港醫(yī)生事業(yè)編考試及答案
- 2026年清明節(jié)的春游活動
- 2025年安徽皖維集團招聘筆試及答案
- 2026年中考英語復習專題課件:謂語動詞的時態(tài)和被動語態(tài)
- 糧食行業(yè)競爭對手分析報告
- 兒科MDT臨床技能情景模擬培訓體系
- 【高三上】2026屆12月八省聯(lián)考(T8聯(lián)考)語文試題含答案
- (人教版)必修第一冊高一物理上學期期末復習訓練 專題02 連接體、傳送帶、板塊問題(原卷版)
- 護理不良事件根本原因分析
- 社會心理學考試題及答案
- 門窗工程掛靠協(xié)議書
- 醫(yī)療器械經(jīng)營企業(yè)質量管理體系文件(2025版)(全套)
- 出鐵廠鐵溝澆注施工方案
- 2025年中小學教師正高級職稱評聘答辯試題(附答案)
評論
0/150
提交評論