第一篇:vb學習綜合資料
VB教程:序言-不再游戲
我們需要什么
我們需要什么?當我們在一個精彩的游戲世界中游歷了一番之后,或是驚嘆于某一工具軟件的小巧精致之余,多少總會產生些許編程的沖動。編程嗎,在以前如果你對電腦還是一個門外漢,那實在是一件可望而不可及的事情。如果運用基于DOS下的編程語言,譬如C、Qbasic、Pascal等等,真不知何年何月才能有所成就。
編程是需要天賦的,你必須在大腦中對整個程序有一個清晰的輪廓,一個高效的流程,這并不是每個人都能做到的,你必須思之慎之,這也使編程變成一件最枯燥無味的事情。但在第四代計算機語言(可視化編程)出現后,可以確切的說它開發了人們的更多天賦,并不局限于那些頭腦異常清晰的人,每一個人都可以發現自己也可以編出一些從前不敢問津的程序,想象力的充分發揮才是第四代語言的精粹。
Visual Basic(以下簡稱VB)可以說是可視化語言的先驅了,而且它也是可視化程度最高的一個,從幾年前VB誕生之日起到現在,它已經經歷了五個版本,而且現在微軟正在緊張的進行著VB6.0的研制、測試,這么高的更新率,不外乎說明兩個問題:用戶對VB的熱衷,微軟對VB的重視。不可否認微軟對市場的預測能力是極為高明的,而它強大的技術、財力支持也使它在許多以前未進入的領域,在不長的時間內有成為最有力的競爭對手,如IE之于瀏覽器領域,《帝國時代》之于游戲都是最好的例證。對于VB現在也有一個很強的競爭對手――Delphi,有人把它稱作VB殺手,這顯然有偏激之處,VB的確有它的不足之處,但Delphi又何嘗不是呢,而且以微軟對VB的傾心,VB的功能必然會越來越強大。
VB的誕生
VB的出現可以說是Microsoft Windows的日漸成熟的必然產物。Microsoft Windows為程序員和最終用戶提供了一個共同的人機界面。對用戶,Windows提供了一個圖形鼠標的操作環境,該環境對所有的應用程序都一樣;對于程序員,Windows提供了一組預定義工具----稱之為Microsoft Windows 的軟件開發工具箱(SDK),該工具能使程序員建立一個與Windows界面相同的應用程序,而且,程序員不必關心最終用戶的硬件配置情況。在這一開發環境中,程序員唯一困難的是Microsoft SDK提供了六百多個函數和與其一致的事件驅動(event-driven)編程技術。兩種新方法的交叉使眾多的程序員重新陷入困境,程序員不僅要掌握程序驅動編程技術和六百多個函數的功能,而且還得用C語言描述這些問題。因此一般情況下,程序員首先要掌握C程序設計技術,而后再開始學習SDK。這樣的條件下就要求在Microsoft多任務環境下出現一種操作方便,使用簡單的新工具----Visual Basic由此誕生。
何為可視
英文Visual的意思是“視覺的”,“可視的Baisc”這個名字可能抽象了點,但實際上它卻是最直觀的編程方法,之所以叫做“可視”,你只要看到VB的界面就會明白,實際上你無需編程,就可以完成許多步驟。在VB中引入了控件的概念,在Windows中控件的身影無處不在,各種各樣的按鈕、文本框、無線鈕,都是控件的種類,VB把這些控件模式化,并且每個控件都有若干屬性用來控制控件的外觀,工作方法。這樣你就可以象在畫板上一樣,隨意點幾下鼠標,一個按鈕就完成了,這些在以前的編程語言下是要經過相當復雜的工作的。
我的希望:
我在學習VB的過程中也曾遇到了許多困難,而且用的參考書大都來自譯文,畢竟美國人和中國人的表達方式有所不同。這也造成了理解上的困難,所以我想為什么我不能寫一個給中國人看到VB教程呢,于是我這么做了。也曾經在雜志上發表過幾篇用VB制作小程序的文章,但受雜志的限制(篇幅、內容等等)(我得聽小編的),總沒有一個機會系統的介紹一下VB,造成了小小的遺憾。不過,我自己的主頁建好后,終于這個愿望可以實現了,利用HTML可以方便的把文字與圖片結合起來,不失為一個教學良所,也希望能夠得到大家的支持。希望“VB教程”能給你我一個互相學習的機會,如果你能從中獲益那將是我最大的快樂,那時你一定會發現編程比游戲有趣得多。:)
VB教程:第一章-Hello World!
沒學過編程的人常常會問,編程難不難,這個問題很難回答。難,的確很難,要編一個好的程序尤其是這樣,并且有些程序還要用到一些其他專業的知識,比如說一個圖形處理程序,就要對圖像的格式有所了解,甚至一些美術知識;但編程也很容易,就拿VB來說,編一個自娛自樂的小工具還是一件相當愜意的事情呢,當然它沒法完全代替人工,譬如說完成你的家庭作業、向學校發射導彈??
作為第四代計算機語言,VB的特點是顯而易見的。因為是“可視的”所以我們不妨先看看VB的界面(圖1_1)(我用的是VB4.0 32位版),很容易可以看到,屏幕上有五個窗口,(1)是菜單欄;(2)是工具箱(Tools Box),里面是VB所需的控件;(3)是VB程序要設計的窗體(Form);(4)控件及窗體的屬性(Properties),在VB中每一個控件都有其自己的屬性,比如文本框有Text屬性,而任何一個控件都有一個自己唯一的名字,這使得我們無需編程就可以完成部分編程的工作;(5)是VB的文件控制窗口,VB的每一個程序稱為一個項目(Project),一個項目文件里往往包括以下兩種文件,窗體(Form)文件和模塊(Bas)文件,當然還有Class文件,這些文件組成一個完整的程序,而項目文件(Vbp)則用來描述程序所包含的內容。
實際上,我一直認為學習的最好方法就是實際操作一下,好,下面我們就來看一個最簡單的程序,和所有的編程教科書一樣,我們把第一個程序稱為“Hello,world!”。
首先,我們先來熟悉一下窗體。如果你用過Win95附件所帶的畫圖板的話,那么你一定會很快熟悉VB的窗體設計方法,用鼠標單擊一下工具箱中的任何一個控件,然后在窗體上任意拖動鼠標,你就會得到一個所需的控件;當然還有其他的方法得到控件,你可以在工具箱上雙擊得到一個控件;或是按住Ctrl鍵,再單擊所需控件,重復第一次的步驟,你會發現,不用再回去點擊工具箱了,點右鍵可以恢復鼠標指針,這樣對于重復畫同一個控件尤其有用。
對于我們的第一個小程序,知道這些就已經足夠了。現在你可以在我們的窗體上畫如下控件一個圖片框(Picture Box),用來顯示圖畫,每一個控件建立的時候,系統都會給它設一個默認的名字(Name),這個PictureBox的名字就叫做Picture1,為了方便起見,我們以后的控件都使用缺省的名稱。選定Picture1,在左邊的屬性窗口中找到Picture屬性,單擊會出現,點擊為Picture1選一個圖像文件,VB支持的圖像文件有BitMap、WMF、ICO三種,微軟為用戶提供了一套圖標文件,存放在VB目錄的Icons目錄下,選擇Iconsmiscface01.ico文件,這樣圖標就被裝入了Picture1。再選擇Pictrue1的Autosize屬性,設為1-True,則會發現Picture1以變成和圖像一樣大了;把BorderStyle定為0-None,去掉圖片邊框。用同樣的方法再添加兩個圖片框:Picture2(Picture:face02.ico),Picture3(Picture:face03.ico)。
圖片框完成了,第二步,建立三個無線鈕(Option Button),由于它象收音機的無線電按鈕而得名),把它們的標簽名屬性(Caption)分別定為“悲哀”,“高興”,“沒治了”,放置成圖1_2的樣子。
最后我們還需要三個文本框(Text Box),分別把它們的Text屬性設為””(空字符串),程序的最后界面如圖1_3,這樣按下菜單窗口的運行按鈕,運行一下程序,還可以吧,不過現在程序還無法工作,就算是VB也不能免俗,還必須輸入代碼才能使程序運作。
VB是一門典型的面向對象編程的語言,它的整個程序都是由事件驅動的。那么,什么是事件呢?其實,我們的生活中充滿了各式各樣的事件,比如說“闖紅燈”這個事件的發生會導致被警察追殺、走路撞到電線桿時會痛。上面的例子雖然有些滑稽,但它可以清楚的解釋事件的含義,就象你馬上就能體會到的在什么地方單擊鼠標時會發生什么,按下鍵盤時會發生什么,這就是事件,而事件就是這么容易。
要進入VB的代碼設計區,只需在需要的控件或窗體上雙擊鼠標即可得到這樣的窗口。如圖1_4,每一個VB程序都由若干小程序組成,這使得用VB編程更加容易,這些小程序,分為“過程”(Procedure)和“函數”(Function),二者都可以傳遞參數,所不同的是函數有一個返回值,而過程沒有,僅此而已。
雙擊窗體的任何一個部分,將出現一個空的過程:“Form_Load()”,這是一個非常重要的過程,它所驅動的事件就是該窗體被加載的事件,打個比方,就象計算機啟動時的批處理程序(Autoexec.bat)。這個程序里我們要對控件進行一些設置。我們剛才也曾對控件進行設置,但那是在程序設置中進行的,有時我們也需要在程序中改變某些控件的屬性,通過程序代碼。VB中規定,一個控件屬性的訪問方法:名稱.屬性,于是我們對本程序的控件進行如下設置:
Private Sub Form_Load()
Picture1.Visible = False Picture2.Visible = False Picture3.Visible = False Text1.Visible = False Text2.Visible = False Text3.Visible = False
End Sub
Private表示此過程是局部的,Sub表示子過程的開始,與之相對的是End Sub表示過程的結束,Visible屬性表示控件的可見性,這個屬性的值有兩個True和False。
注意:
VB里對大小寫是不加區分的,而且,已定義的名稱,以后再用到時,系統會自動把它變成相應的大寫或小寫。
小知識:
1.VB里的對變量及常量的規矩。
變量一般為Abc的格式,常量為ABC,另外這些變量和常量名不得同VB內的關鍵字相同,也不可以使用一些特殊符號,這些我們將在以后介紹,注意在學習中養成好習慣,使程序便于自己和別人的瀏覽。
2.程序書寫的竅門:
不要真的一句一句把程序打完,利用快捷鍵:拷貝Ctrl+C,剪切Ctrl+T,粘貼Ctrl+P。
按下F5,運行一下程序,現在發現只剩下無線鈕了。如圖1_5。
Private Sub Form_Load()
Picture1.Visible = False Picture2.Visible = False Picture3.Visible = False Text1.Visible = False Text2.Visible = False Text3.Visible = False Option4.Left =-2000 Option4.Value = True
End Sub
Left屬性表示控件離窗體左邊框的距離,設置為-2000,則在窗體內不會看到這個控件,并使之Value=True。再運行程序,一切如愿,如圖1_6.注意:為什么不用Option4.Visible=False?
因為,一旦設置無線鈕為不可見,那么再使它的Value為真是沒有意義的,不信自己試試。
下面我們可以繼續進行了。在剛才的代碼窗口里,將Object選擇為Option1,Proc選擇為Click,即得到一個Option1_Click的過程。代碼如下:
Private Sub Option1_Click()
Picture1.Visible = True Picture2.Visible = False Picture3.Visible = False Text1.Visible = True Text2.Visible = False Text3.Visible = False Text1.Text = “再見,殘酷的世界。”
End Sub
相同的建立Option2_Click和Option2_Click:
Private Sub Option2_Click()
Picture2.Visible = True Picture1.Visible = False Picture3.Visible = False Text2.Visible = True Text1.Visible = False Text3.Visible = False Text2.Text = “今天心情不錯。”
End Sub
Private Sub Option3_Click()
Picture3.Visible = True Picture2.Visible = False Picture1.Visible = False Text3.Visible = True Text2.Visible = False Text1.Visible = False Text3.Text = “Hello,World。”
End Sub
好,我們的開山之作完成了!按下F5,玩一下吧。這個程序雖然簡單,但也用到了許多基本知識,你開始感興趣了嗎?^_^
VB教程:第二章-事件、屬性及數據類型
以后兩章可能會比較枯燥,但不可否認也很重要,所以為了學好VB,我們一定要打好基礎才行。
一、事件
通過上一章的例子,你可能對“面向對象的編程”已經有了一定了解,它是由事件驅動的,對于不同的對象,所能感應到的事件也會不同,譬如說當你把鼠標移進某一區域時就會觸發MouseMove事件,這很直觀,也容易理解,但也有些事件比較抽象,下面我來對一般的事件進行一下解釋。
窗體和圖象框類事件
Paint事件:當某一對象在屏幕中被移動,改變尺寸或清除后,程序會自動調用Paint事件。注意:當對象的AutoDraw屬性為True(-1)時,程序不會調用Paint事件。
Resize事件:當對象的大小改變時觸發Resize事件。
Load事件:僅適用于窗體對象,當窗體被裝載時運行。
Unload事件:僅適用于窗體對象,當窗體被卸載時運行。
2.當前光標(Focus)事件
GotFocus事件:當光標聚焦于該對象時發生事件。
LostFocus事件:當光標離開該對象時發生事件。
注意:Focus英文為“焦點”、“聚焦”之意,最直觀的例子是,比如有兩個窗體,互相有一部分遮蓋,當你點下面的窗體時,它就會全部顯示出來,這時它處在被激活的狀態,并且標題條變成藍色,這就是GotFocus事件,而相反,另外一個窗體被遮蓋,并且標題條變灰,稱為LostFocus事件。上面所說的“光標”并非指鼠標指針。
3.鼠標操作事件
Click事件:鼠標單擊對象。
DbClick事件:鼠標雙擊事件。
MouseDown、MouseUp屬性:按下/放開鼠標鍵事件。
MouseMove事件:鼠標移動事件。
DragDrop事件:拖放事件,相當于MouseDown、MouseMove和MouseUp的組合。
DragOver事件:鼠標在拖放過程中就會產生DragOver事件。
4.鍵盤操作屬性
KeyDown、KeyUp事件:按鍵的按下/放開事件。
KeyPress事件:按鍵事件。
5.改變控制項事件
Change事件:當對象的內容發生改變時,觸發Change事件。最典型的例子是文本框(TextBox)。
DropDown事件:下彈事件,僅用于組合框(ComboBox)對象。
PathChange事件:路徑改變事件,僅用于文件列表框(FileBox)對象。
6.其他事件
Timer事件:僅用于計時器,每隔一段時間被觸發一次。
二、屬性
每個對象都有它的屬性,并且“Name”屬性是共有的,有了“Name”屬性才可以在程序中進行調用。對于屬性,可以在窗體的布局操作中完成,也可以在程序運行中改變,這取決你的需要,但有些屬性是只讀的,它只能在控件布局時改變。我將在以后的實例中具體介紹各個屬性的作用。
三、數據類型
學過編程的人都知道大多數的計算機語言都規定了各自的數據類型,VB也不例外。其實,在一個最簡單的程序中數據類型是可以不作規定的,也就是說,變量可以使用各種類型,但是在一個復雜的程序里,這樣做就很危險,因為很可能給同一個變量賦予了不同的類型,而導致程序出錯。所以,為了程序的嚴謹和便于查看,正確的定義數據類型是必要的。定義數據的另一個原因是,不同的數據占用不同的內存數量,譬如整型(Interger)數據占2字節,而長整型數據占4個字節,定義合適的數據類型,不管你相信不相信,它可以節省內存!
VB常用的數據類型有:整型(Integer,表示-32768至32767之間的整數)、長整型(Long,表示-2,147,483,648至2,147,483,647之間的整數)、實型(Single,表示-3.37E+38至3.37E+38之間的實數)、雙精度實型(Double,表示-1.67E+308至1.67E+308之間的實數),字符(String,每個字符占一字節,可以儲存0~65,535個字符),布爾(Boolean,只有兩個值True/-1,或False/0)。
數據類型的定義方法:
定義變量最簡單的方法是用“Dim”關鍵字,它的語法:
Dim 【變量名】As 【數據類型】
如:Dim Index As Integer
也可以在一行中定義多個變量,如:
Dim Index As Integer , Dim Number As Long
把多個變量定義成同一類型可以寫成:
Dim Index , Number As Integer
有時為了簡便,也以符號進行簡單的定義,作用是和上面一樣的。整型可以用“%”代替,長整型可以用“&”代替,實型可以用“!”,雙精度實型可以用“#”定義,如剛才的第一個例子可以寫成:
Dim Index% 等價于 Dim Index As Integer
對于常量的定義用Const定義,如:Const COLOR=255。
為了在程序中便于查閱,我們對變量和常量的寫法進行規定,變量一般用小寫方式,常量則全部大寫。
注意:使用常量的好處,對于程序中經常出現的數值,應設常量等于它,這樣一是書寫方便,其二,如果要改變該數值,只需改變定義常量的語句值,而不需改變每個語句,提高了效率。
數組的定義類似于變量定義,所不同的是數組需要指定數組中的元素個數,例如:
Dim IntegerArray(99)As Integer
這個數組中包含100個元素,腳標從0到99。
也可以指定腳標的起始值,例如:
Dim IntegerArray(2 to 10)As Integer
這個數組含有九個元素,腳標從2到10。
還可以定義多維數組:
Dim ThreeD(4,2 to 5,3 to 6)As Integer
上例定義了一個三維數組(4×4×4)。
記錄的定義
記錄定義是把控制權交給用戶的方法,它讓用戶可以定義自己的數據類型,它使用關鍵字“Type”,方法是:
Type 【數據類型標識符】
<域名> As <數據類型> <域名> As <數據類型> <域名> As <數據類型> ??????????
End Type
例如,定義一個地址數據:
Type Address
Street As String ZipCode As String Phone As String
End Type
這個地址數據里包括三個屬性,街區、郵政編碼和電話,可以把某數據定義成此類型:
Dim MyHome As Address
要調用或改變“MyHome”的值時,類似于對對象的屬性的操作:
變量名.域名=“??”
為了簡化書寫重復的部分,可以用關鍵字“With”:
With MyHome
.Street=”阜成路”.ZipCode=”100037”.Phone=”12345678”
End With
VB教程:第三章-VB語言
一、VB與Basic
VB之所以叫做“Visual Basic”就是因為它使用了Basic語言作為代碼,所以它們之間有著千絲萬縷的關系,如果學過Basic的話,看到VB的程序結構會感到很親切。但VB作為新生物,也超越了Basic的限制,有了許多自己的特點:
VB建立了一種新的變量類型――貨幣型變量,通過使用僅帶有二位小數的貨幣變量,就能避免因使用實型變量而帶來的數值積累誤差問題。
VB在調用函數(Function)時,必須在函數名后跟一對括號。
VB對白蘭地使用范圍重新做了規范,在Basic里把隱含變量都當作全局變量,而在VB里對隱含變量都當作局部變量。
VB里的說明語句(Declare),僅支持動態鏈結庫(DLL)的子程序和無變量函數。
使用數組,必須事先用Dim或Redim進行定義。
二、注釋語句
在使用注釋語句之前必須先了解注釋的作用,注釋不僅僅是對程序的解釋,有時它對于程序的調試也非常有用,譬如說可以利用注釋屏蔽一條語句以觀察變化,發現問題和錯誤。以后注釋語句將是我們在編程里最經常用到的語句之一。
在VB里,注釋語句有兩種,一種是用“Rem”關鍵字,這跟DOS里的批處理文件的用法一樣,還有一種是利用單引號“’”,例如:
‘Dim a As String 與
Rem Dim a As String 的作用是一致的。
三、長語句的分行
在比較早的版本中,因為沒有象C等語言用“;”隔開語句與語句,VB的語句是必須寫在一行里的,不過后來版本的VB里如許用分行符“_”把一個長語句分成若干行來存放。
四、條件語句
如果你學過任何一種編程的話,都會知道在程序里控制其流程的有兩種語句,條件與循環,VB自然也不例外,其實不管哪種語言,條件和循環的樣子都差不多,只不過各有各的規矩罷了。
在條件語句里,我們先來學習“If??Then??”語句。
它的一般語法是:
If <條件> Then
<語句> <語句> ???
End If
與C 語言不同,VB的條件語句更符合英語的語法,如果Then后面所跟的語句只有一條,可以寫成: If <條件> Then <語句>
而不用End If。
有時我們還會用到
If <條件> Then
<語句> Else
<語句>
End If
更可以在Else里在嵌套If語句,如:
If <條件> Then
<語句> Else If
<語句> Else
<語句>
End If
所有這些可以用一個表格表示:
條件1
True False
語
句 條件2
True False
語 句 條件3
True False
?
?
?
………………………
條件N
True False
語句N 語句N+1
用了過多的Else后你會感到很不方便,而且程序結構也不清晰,所以大多數的語言還有Select語句幫助解決這個問題。
VB里的Select語句的格式是這樣的:
Select Case <變量名>
Case <情況1>
……
Case <情況2>
……
Case <情況3>
……
……
…… Case Else
……
End Select
例如:
Select Case a%
Case 1
Print “a=1” Case 2
Print “a=2” Case Else
Print “a does not equal to 1 or 2.”
End Select
五、循環語句
循環結構是計算機語言里一種重要的結構,它的應用廣泛,最簡單的例子是累加器的作用,還可以用于窮舉法,更直觀的例子是把某件事重復指定的次數,這樣就不用把要重復的語句輸入多次,而通過循環結構完成,非常方便。
C語言里有一個“for”循環語句,VB里也有“For”關鍵字,作用也差不多,只是VB的“For”語句更容易理解。它的格式是:
For <循環變量>=<初賦值> To <終值> [Step <步長>] ?? ??
Next <循環變量>
在默認情況下,Step被設為“1”,可以省略,Step也可以設為負值,例如:
Dim a=0
For I=1 To 10
a=a+I
Next I
這是一個最簡單的累加器的例子,把1到10累加在一起,然后賦值給“a”這樣的效果和上面是一樣的,只不過是倒著加罷了,請看:
Dim a=0
For I=10 To 1 Step –1
a=a+I
Next I
While語句也是一個很常用的循環語句,它的形式很多。
Do While ?? Loop語句
While ?? Wend 語句
Do …… Loop While
While后面都跟邏輯條件判斷,“Do While ?? Loop語句”和“While ?? Wend 語句”作用相似,都是先判斷While后面的條件是否為“真”,如果為“真”則執行里面的語句,如果為“假”,則退出循環,循環直至條件為“假”終止。“Do ?? Loop While ”與前兩者的區別在于,它不管條件的真假,都會先執行“Do”后面的語句,也就是說,它至少執行語句一次。
與While用法相似的還有Until語句,它是直至條件為真則終止循環,句式把While上述三個語句的While換成Until即可,但是因為容易記混,所以我建議只用While即可。Until <條件>可以相當于While Not <條件>。
For循環和Whlie循環應當根據適當的環境使用,它們有時也可替換。
六、運算操作
數學運算
+:加法運算,也適合于字符串的之間的合并運算。
-:加法運算。
*:乘法運算。
/:除法運算。
:整除運算。
Mod:求余運算。例如:a Mod b表示a被b整除以后的余數。
^:冪運算。A^B表示以A為底的B次方。
關系運算
關系運算也稱比較運算,它表示不等式的真或假,VB共提供六種運算符,分別是=(等于),>(大于),<(小于),>=(大于等于),<=(小于等于)和<>(不等于)。
邏輯運算
邏輯運算是對真或假的運算,我將列表說明:
A B Not A 非
And 與 Or 或 Xor 異或
Eqv 相等
Imp 蘊含
T T F T T F T T
T F F F T T F F
F T T F T T F T
F F T F F F T T
T――True F――False
七、數據與定義
本標題的內容已經在上一章向大家詳述過,在這里就不再重復。
八、函數與過程
函數與過程有許多相似的地方,它們之間最大也是最本質的區別就在于,函數有一個返回值,而過程只是執行一系列動作,所以可以簡單的把函數理解成為一個變量,而VB中的每個事件都是一個過程,比如Command1_Click()就是一個過程。
因為在程序設計中經常會有重復的地方,所以把它做成一個函數或一個過程,在使用時進行調用,可以節省大量的輸入代碼的時間,而且使用函數和過程也便于程序的結構化和修改查看。函數和過程都可以有參數,也可以沒有參數。
關于函數和過程我將在以后的章中配合實例講解,請您繼續留意VB教程。
VB教程:第四章-按鈕
從本章開始我們將正式進入VB的編程世界,但這還僅僅是個開端,要編出功能強大的軟件,還要學很多東西,那就要看以后的VB高級教程了,我也得努力學啊!
按鈕是我們在Windows操作見到最多的控件,它們有著各種各樣的功能:“確認”、“取消”、“下一步”等等,這些都是按鈕的表現,另外還有很多圖形話的按鈕,其實它們并沒什么不同,所有的按鈕都是通過單擊(click)事件實現的,只不過是在外表不同罷了。下面就讓我們建立一個最簡單的按鈕,雙擊工具箱的CommandButton,將在窗體上建立一個形如圖4-1的按鈕,它的缺省名(Name屬性)為Command1,我們可以把它改名為cmdExit,把Caption屬性設為“退出”,然后雙擊,按鈕填寫代碼:
Private Sub cmdExit_Click()
Unload Me
End Sub
按下F5或者工具條上的播放按鈕,運行程序。圖4-2當你按下退出按鈕的時候,就會自動退出程序,原因是當你單擊按鈕時激活了它的Click事件,執行“Unload Me”語句,使得窗體被卸載。
上面舉了一個比較簡單的例子,下面的例子稍微復雜些:
新建窗體,控件布局如圖4-3所示,包括一個List控件,一個Text控件和兩個按鈕(Command1和Command2),(比較簡單的程序我們都采用缺省名),對它們屬性做如下修改:
List1 Caption=“請輸入你的名字”
Text1 Text=“”(空字符串)Button1 Caption=“復原”
Enabled=False
Button2 Caption=“清除”
把使用Button1的Enabled屬性設為False(假),是使程序在初始時,無法單擊Command1。按F5,運行程序,圖4-4,復原按鈕成為灰色,不可選。
當然現在程序還什么也不能做,下面我們在程序中添加代碼:
首先在General里聲明全局變量:
Dim StoreString As String '用來儲存字符串
※注意:為什么用全局變量?
VB里每一個小過程都相當于一個程序,程序里的變量稱為局部變量,是只能在程序內部使用的,而當程序調用結束后,由于從內存中被清除,所以變量儲存的值也就消失了,這里的全局變量是用來在過程中傳遞字符串。
接著填寫以下代碼: Private Sub Command1_Click()
Text1.Text = StoreString Command1.Enabled = False
End Sub
Private Sub Command2_Click()
StoreString = Text1.Text Text1.Text = “" '清除
Command1.Enabled = True
End Sub
運行程序,如圖4-5。按下“清除”,文本框被清除,按下“復原”,文本有被恢復,許多程序中的Undo/Redo就是利用這個原理實現的,現在知道為什么內存越多越好了吧。
我們在把程序修改一下,把Button2刪除,Button1的Enabled屬性改為True,Caption改為“清除”,填寫代碼:
Private Sub Command1_Click()
If Command1.Caption = ”清除“ Then
StoreString = Text1.Text Text1.Text = ”“ '清除
Command1.Caption = ”復原“ Else
Text1.Text = StoreString Command1.Caption = ”清除“
End If
End Sub
同樣可以上面的功能,但是卻少用了一個控件,控件使用少的程序啟動會快些。
下面的例子要更加復雜些,大家一定都用過Windows附件中的計算器,它是一個標準的科學計算器,利用VB我們也可以做到,只是沒有那么復雜,四則運算而已。
先建立一個新的項目文件,里面包含一個Form1的窗體。然后,添加控件,包括一個Text框(Text1),和17個按鈕,這17個按鈕使用的名稱都是Command1,只是Index屬性不同,就好象一個數組,創立一組按鈕的方法是,先在窗體上建立一個按鈕(Command1),然后在Command1上擊鼠標右鍵,選擇復制(Copy),然后在窗體上任意部位擊右鍵,選擇粘貼(Paste),系統會提示是否創建控件組,選擇“是”,重復上面步驟,直至創立17個按鈕為止。各控件屬性如下表:
Text1 BackColor=&H00C0FFFF& Text=“0.”
Command1 Index 0――16
Index 0――9 Caption=“0”-“9” Index 10 Caption=“.”
Index 11 Caption=“=”
Index 12 Caption=“+”
Index 13 Caption=“-”
Index 14 Caption=“×”
Index 15 Caption=“÷”
Index 16 Caption=“清除”
如果想改變一些其他的屬性,比如字體,可以自己定義一下Font屬性,如果相對多個控件的共同屬性進行改變,可以在窗體上按下鼠標,拖動,把多個控件一起選定,然后對它們的共同屬性進行修改。
別看這個東西小,還費了近我兩個小時呢,不覺大嘆手生,里面也有些地方很繞彎子,我盡量解釋清楚。
在編寫程序之前,我們先來回顧一下計算器的使用。
按下數字鍵在液晶屏上會出現數字,這是最基本的功能。
第一次按下運算鍵,再按下數字鍵,將重新輸入第二個數字,再次按下運算鍵,將算出前兩個數的結果,然后按下數字鍵,將又重新輸入新的數字。
輸入數字后,按下“等于鍵”將仍輸出原來的數字,輸入運算符和第二個數字后在按下“等于”,將得到二者的結果。然后又重復第二、三步。
按下“清除”,數據被全部清除。
了解了這些,我們一步一步實現。先實現數據的輸入,請看代碼。與未創立組的控件相比,它的事件里多了Index參數,組里所有的對象都使用同一個事件。先在General里聲明窗體級全局變量: Dim Num1, Num2 As Single Dim StrNum1, StrNum2 As String Dim FirstNum As Boolean '判斷是否是數字開頭
因為Text1里是存放字符串的,所以要把輸入的數據進行運算,必須把字符型變量轉變為實型變量,分別用Num1、Num2和StrNum1、StrNum2進行存放。在Form_Load事件里給變量初賦值:
Num1 = 0 Num2 = 0 StrNum1 = ”“ StrNum2 = ”“ FirstNum = True
因為17個按鈕使用的是同一事件,所以我們用一個Select Case語句區分各個按鈕,雙擊任意按鈕輸入代碼:
Private Sub Command1_Click(Index As Integer)
Select Case Index
Case 0 To 9
If FirstNum Then
StrNum1 = Str(Index)’實型轉字符型 FirstNum = False’初賦值為假
Else’非初賦值
StrNum1 = StrNum1 + Str(Index)
End If
Text1.Text = StrNum1’顯示
<還有其他語句,等待插入>
End Select
End Sub
運行程序的話已經可以輸入數據,下面我們來處理小數點。在General里聲明新的變量:
Dim PointFlag As Boolean '判斷是否已有小數點
我們知道小數點只能輸入一次,一個數據中不能有多個小數點存在,所以需要一個布爾變量做判斷。
在Form_Load里進行初賦值:
PointFlag = False
在Command的單擊事件里接著上面輸入新的代碼:
Case 10
If Not PointFlag Then’如果沒有小數點
If FirstNum Then’如果是第一個字符
StrNum1 = ”0.“ FirstNum = False Else
StrNum1 = StrNum1 + ”.“
End If
Else’已有小數點
Exit Sub’則退出單擊事件
End If
PointFlag = True Text1.Text = StrNum1
下面會復雜一些,我們先跳過等號,而來處理四則運算:
先在General里聲明新變量:
Dim Runsign As Integer '儲存運算符號
Dim SignFlag As Boolean '判斷是否已有運算符號
然后在Form_Load中進行初賦值:
Runsign = 0 SignFlag = False
在接下的Command1_Click中繼續輸入代碼:
Case 12 To 15
FirstNum = True’使下一次可以輸入新數據 PointFlag = False '還原標記值
If SignFlag Then’前面已有運算符未運算
Call Run Else
SignFlag = True StrNum2 = StrNum1’把字符串1復制給字符串2 StrNum1 = ”“’字符串1清空
End If
Runsign = IndexNum2
Case 3’乘
equal = Num1 * Num2
Case 4’除
equal = Num1 / Num2
End Select
StrNum2 = Str(equal)StrNum1 = StrNum2 Text1.Text = StrNum2
End Sub
下面是其余的代碼:(在Command1_Click事件里,接著寫)
Case 11
If Not SignFlag Then
Text1.Text = StrNum1 equal = Val(StrNum1)FirstNum = True PointFlag = False Else
Call Run SignFlag = False
End If
Case Else’清除按鈕
Call ClearData
里面又用到了一個ClearData過程,實際上就是Form_Load里的變量初賦值,代碼如下:
Sub ClearData()
Num1 = 0 Num2 = 0 StrNum1 = ”“ StrNum2 = ”“ FirstNum = True PointFlag = False Runsign = 0 SignFlag = False Text1.Text = ”0.“
End Sub
這樣完整的程序就完成了,本章介紹了VB的第一個控件――按鈕,并且舉例,希望你繼續看下一章――菜單。
下面給出完整的程序代碼:
Dim Num1, Num2 As Single
Dim StrNum1, StrNum2 As String
Dim FirstNum As Boolean '判斷是否是數字開頭
Dim PointFlag As Boolean '判斷是否已有小數點
Dim Runsign As Integer '儲存運算符號
Dim SignFlag As Boolean '判斷是否已有運算符號
Sub ClearData()
Num1 = 0
Num2 = 0
StrNum1 = ”“
StrNum2 = ”“
FirstNum = True
PointFlag = False
Runsign = 0 SignFlag = False
Text1.Text = ”0.“
End Sub
Sub Run()
Num1 = Val(StrNum2)
Num2 = Val(StrNum1)
Select Case Runsign
Case 1
equal = Num1 + Num2
Case 2
equal = Num1Command1.Width)/ 2
'重疊三個圖片框
Picture2.Left = Picture1.Left
Picture2.Top = Picture1.Top
Picture3.Left = Picture1.Left
Picture3.Top = Picture1.Top
End Sub
下面我來講一講程序是怎樣運行的,我們將用到Text的Change事件,每當字符串改變一次就對它進行一次檢查,算出已經說的字數,當字數超過10時,下面的紅綠燈會變成黃色,并且在這時隨機抽取一個數,它在一個范圍內出現的可能是10%,如果在這個范圍內就可以免交罰金,如果不在范圍則繼續,當文字超過20的時候,紅綠燈會變成紅色,再一次抽取隨機數字,步驟同上,如果30個字已滿,再進行一次檢查,如果你真的那么不幸就該罰款了。
程序的步驟清楚了,我們在來看看程序的要點。由于中文是雙字節字符,也就是說一個漢字占兩個ASC碼的位置,而VB顯然是為英語國家設計的用Len函數無法返回漢字字節,也就是說一個漢字和和一個ASC字符在Len函數中得到的值是一樣的,這就需要特殊處理。用Asc()函數,在括號內放入一個ASC字符或字符串,它會把第一個ASC碼轉化為0-255的數值,而把一個漢字放入,它的值必然不在0-255,這也就可以作為判定漢字的基礎。我們可以把英文算作半個漢字。
下面我們來看看代碼:
在General 里聲明窗體級變量:
Dim Level As Integer
Private Sub Command1_Click()
Unload Me End Sub
Private Sub Text1_Change()
Dim StrLength As Integer’字符串長度
Dim RandomNum As Single’隨機數
Dim Str1 As String
Dim a As String
Dim i, Temp
StrLength = 0’每次開始時把字符串長度還原為0
a = Text1.Text
For i = 1 To Len(a)’Len(a)代表字符串的長度
Temp = Asc(Mid$(a, i, 1))’挨個取字符
If Temp > 255 Or Temp < 0 Then’不是ASC碼
StrLength = StrLength + 2 Else
StrLength = StrLength + 1
End If
Next i
StrLength = StrLength / 2
Select Case StrLength
Case 0 To 9
Picture1.Visible = True
Picture2.Visible = False Picture3.Visible = False
Label2.Caption = ”慢慢說。你還有“ & Str(30StrLength)& ”個字可以說“
End If
Case 20 To 29
If Level = 2 Then RandomNum = Rnd * 10
If RandomNum <= 10 And RandomNum > 9 Then
Text1.Enabled = False
Label2.Caption = ”很抱歉這是個誤會??“
Command1.Visible = True
Command1.Caption = ”您可以離開了“
End If
Level = 3 Else
Picture1.Visible = False
Picture2.Visible = False
Picture3.Visible = True
Str1 = ”我已經不耐煩了!“
Label2.Caption = Str1 & ”你還有“ & Str(30-StrLength)& ”個字可以說“
End If
Case Else
Text1.Enabled = False
Label2.Caption = ”你已經沒有機會了!“
Command1.Visible = True
Command1.Caption = ”交錢吧,肇事犯!“
End Select
End Sub
中間有幾個函數需要解釋一下:
Mid可以從字符串中取出一部分,返回字符型,格式:
Mid(字符串,從第幾個字符開始,取字符的長度)
Asc可以把字符轉換為ASCII碼,格式:
Asc(字符串)
Rnd,取得大于0但小于1 的數值,可以沒有參數。
怎么樣,十分簡單吧,我們將在下一次繼續討論VB的輸入機制,再見!
VB教程:第六章(2)-輸入(2)
在繼續上面的內容時,我想再回顧和強調幾個在字符串操作中經常函數:
先是幾個已經接觸過的,Mid(),Asc(),Len(),它們的語法分別是:
Mid(字符型,起始字符,長度)
返回子字符串,如果從字符串的第一個字符取起,起始字符為1,依此類推。
Asc(字符型)
返回數值,如果參數不是一個字符,而是字符串(多個字符),將返回參數的第一個字符ASCII值。
Len(字符型)
返回字符串的長度。下面我再為你解釋幾個新的函數:
Left(字符串,長度)
將返回字符型,從字符串的第一個字符向左取字符串,與之相對應的是Right(),它將從字符串的最后一個字符向右取字符串。
Chr(數值型)
該數值范圍從0-255,返回字符型,如Chr(65)可返回字符“A”,這樣可以輸入一些用鍵盤無法輸入的字符。
Str(數值型)
該函數把數值型轉換為字符型,也許你覺得數值“123”和字符串“123”沒什么區別,但在內存中一個ASCII字符是占一個字節,也就是說字符串“123”占3個字節,而當數值“123”是整型時,它占兩個字符,當它是長整型時,占4個字節。與之向對應的是Val(數值型),它把數值型轉換為字符型。
上面的函數都是以后要經常用到的,請將它們熟悉。
上次講到文本框的用處,還有意思嗎?你是否能把上次的程序稍稍變動一下,來計算出輸入的單詞數,提示一下,單詞與單詞之間是用空格分隔開的。
我們繼續下面的內容。
上次說到,輸入不僅僅是向文本框輸入字符,凡是從外界向程序傳遞數據都可以叫做輸入,我們一一說明白。
無線鈕,記得我們曾在第一章中完成過我們的第一個程序――“Hello World!”它就是一種輸入的方法,在設計VB程序時可以通過一組這樣的無線鈕,它們之間互相排斥,也就是說,只能有一個按鈕被選中。它因為很象無線電收音機上的按鈕因而得名無線鈕。如果要在一個窗體內放置多組無線鈕必須用Frame控件把它們區分開來。下面我們在來完成一個例子,順便熟悉一下另外兩個處理字符串的函數――LTrim()和Rtrim(),它們分別用來刪除字符串左邊的空格和右邊的空格,讓我們看看它們是如何工作的。
程序窗體如圖6-8,由于窗體比較簡單,無需修改更多的屬性,一共有三個文本框(Text1到3),分別用來顯示輸入字符,顯示把空格換成星號的字符,和經過處理的字符,還有三個無線鈕(Option1到3),要修改的只有Caption屬性,分別是“刪除左邊的空格”、“刪除右邊的空格”和“刪除兩邊的空格”。因為空格在我們在文本框中無法看到空格,所以我們通過一個稱作AddStar的函數把原有字符串中的空格轉換為星號,使我們能夠看到函數的效果。下面在程序中添加代碼,首先在General中聲明窗體級變量:
Dim LTrimmedword$, RTrimmedword$ '刪除左邊空格和右邊空格后的字符串
Dim LRTrimmedword$ '刪除兩邊空格后的字符串
然后,我們通過一個叫做addstar的函數為字符串加上星號,以前曾說過函數與過程的分別,函數會返回一個函數值,所以addstar也就相當于一個變量,其實這很好理解,就象中學代數中的函數,函數就相當于變量Y,而函數中的參數則相當于自變量X,當然可能有很多自變量X1、X2??請原諒,我并不想在這里上數學課,因為我厭惡那玩意兒,特別是上了大學之后,好在大二以后就再也不會有數學課了,哈哈??
Function addstar(tempword As String)As String
Dim charindex% Dim pasteword$ '加星號后的字符串 For charindex = 1 To Len(tempword)
If Mid(tempword, charindex, 1)= ” “ Then '如果字符為空格
pasteword = pasteword + ”*“
Else: pasteword = pasteword + Mid(tempword, charindex, 1)End If Next addstar = pasteword '返回函數值
End Function
下面的代碼很簡單,并且我為它做了注釋,就不再一一解釋了,我只想簡要的提幾句,Ltrim和Rtrim只有一個參數(字符型),另外下面用到了焦點事件,我們曾在第三章中介紹過,當Text1得到焦點(GotFocus)時,清空所有的文本框,當它失去焦點(LostFocus)時,對字符進行addstar并且在Text2中顯示。
Private Sub Text1_GotFocus()'但焦點于Text1
'清除所有文本框中的字符 Text1.Text = ”“ Text2.Text = ”“ Text3.Text = ”“
End Sub
Private Sub Text1_LostFocus()
Dim Origionword As String Origionword = Text1.Text Text2.Text = addstar(Origionword)LTrimmedword = addstar(LTrim(Origionword))RTrimmedword = addstar(RTrim(Origionword))LRTrimmedword = LTrim(RTrim(Origionword))
End Sub
Private Sub Option1_Click()
Text3.Text = LTrimmedword '顯示刪除左空格后的字符串
End Sub
Private Sub Option2_Click()
Text3.Text = RTrimmedword '顯示刪除右空格后的字符串
End Sub
Private Sub Option3_Click()
Text3.Text = LRTrimmedword '顯示刪除兩邊空格后的字符串
End Sub
最后結果如圖6-9。
與無線鈕相對的是檢查框,在同一范圍內一組無線鈕只能有一個被選中,而檢查框則可以有多個選擇,就象在添表時,性別那項只能有一個選擇,而在描述你以前的職業時可以有學生、程序員、家庭教師或者什么,總之有很多選擇,下面我們舉一個簡單的例子加以說明。
假設編寫了一個共享軟件,在讓用戶注冊的時候你想知道你的用戶使用的計算機情況,你就需要一個調查表,為了使這個調查表不止枯燥,可以在這個程序中加入一些圖形。新建一個項目文件,窗體布局如圖6-10。
程序很簡單,一共有兩個框架(Frame1和Frame2),它們的Caption分別為“選擇你的計算機擁有的配置”和“這是你的計算機系統”,在Frame1有四個檢查框(Check1到Check4),Caption分別為“網絡系統”、“鼠標”、“密碼保護”和“電子郵件”,另把Check4的Enabled屬性改為False,使其無效;在Frame2中放置四個圖片框(Picture1到Picture4)與四個檢查框向對應,請把所有圖片框的BorderStyle屬性設為0(無邊框),它們的Picture屬性請根據上圖,在存放圖標的目錄中找到相對的圖標。下面是程序代碼:
Private Sub Check1_Click()
If Check1.Value Then
Check4.Enabled =-1 Picture1.Visible =-1
Else: Check4.Enabled = 0 Picture1.Visible = 0 Check4.Value = 0 Picture4.Visible = 0
End If
End Sub
Private Sub Check2_Click()
If Check2.Value Then
Picture2.Visible =-1
Else: Picture2.Visible = 0
End If
End Sub
Private Sub Check3_Click()
If Check3.Value Then
Picture3.Visible =-1
Else: Picture3.Visible = 0
End If
End Sub
Private Sub Check4_Click()
If Check4.Value Then
Picture4.Visible =-1
Else: Picture4.Visible = 0
End If
End Sub
這個程序比我們見過的任何程序都簡單,就不再做說明。
(第六章 未完)
VB教程:第六章(3)-輸入(3)
首先,我想先對第六章的拖拖拉拉表示歉意,一是因為它實在太長了,二也是因為我自己太懶了,今天寫幾個字,明天添兩筆,以致于寫了三次才將它真正完成,還請大家原諒。
好,廢話少說,讓我們趕快切入正題。上次我們討論了無線鈕和檢查框的使用方法,相信你已經熟悉,因為它們實在太簡單了,現在讓我們繼續“輸入”的最后幾個部分。
滾動條(ScrollBar)在視窗中也是一個不可缺少的部分,由于面積所限,我們不得把屏幕上的內容滾來滾去,以顯示大量的內容,這就是我們經常要用到的滾動條。但滾動條除去滾動窗口,還有一個很重要的作用――輸入,想想你經常用到的一些家用電器上調節聲音或別的什么東西的滑塊,你把它滑向大的一方音量就會增大,而你把它滑向小的一方音量就會減小,或者一個控制左右兩個音箱的均衡器,當滑塊在正中央的時候,兩個音箱的音量是相同的,當你把滑塊偏向一方時,音箱的音量有了大小之分,在Windows操作中,我們也經常要用到類似的效果。
在VB中提供了兩個常規的滾動條控件――Vscroll和Hscroll,分別代表垂直的和水平的滾動條,它們只不過是方向不同而已,而它們的屬性,以及會發生的事件都是相同的。,滾動條有幾個特殊的屬性:
Value屬性,當滑塊挪動后停在某一位置時,就改變了滾動條的Value屬性。
Max和Min屬性,用來設置滾動條的最大值和最小值,譬如把Max設為100,把Min設為0時,滾動條的Value就在0到100之間移動,當Max和Min倒置時,滾動條的方向也會相反,也就是說,當Max SmallChange和LargeChange屬性,當鼠標在滾動條兩頭的箭頭上單擊時,就會把滾動條向相應的方向挪動一點,這時用到的就是SmallChange屬性,當你把它設為1時,每點一下,滾動條的Value就改變1;當鼠標在滾動條上點擊時,用到的就是LargeChange,當設為10時,每點擊一下滾動條,Value就改變10。 下面我們看一個實例。 大家都知道,物體之所以會有顏色是因為物體表面的材料吸收了太陽光中的部分色光,而還有部分色光沒被吸收而被反射回來,它就成了我們看到的顏色,黑色就是物體吸收了所有的太陽光的所有色光,沒有反射顏色,所以在我們看來是黑的,而當物體反射了所有的色光,我們看到的就是白色。在計算機中,顏色的表示就是象我們剛才描述的樣子,它把顏色分為紅(R)、綠(G)和藍(B)。眾所周知,計算機的機器語言是使用二進制表示的,為了方便查閱我們看到的往往是十六進制代碼,一個字節包括兩位十六進制數字,從0-255(十六進制表示0-FF),而一個字節是由八位二進制數值表示(2^8,2的8次方),計算機中用分別用一個字節,也就是八位表示一種顏色,和在一起也就是三個字節(24位)表示所有的顏色,這就是我們平時常說的24位真彩,它一共可以組成256×256×256(2^24)種顏色,對于我們的肉眼,是根本分辨不出來相鄰兩個不同的顏色的,比如用FFFFFF表示白色,就好象我們剛才說的物體反射了所有的色光,相反的可以用000000表示黑色,它吸收了所有的色光,還可以用FF0000表示紅色,在HTML語言中就是這樣表示顏色的。 小知識:現在你可以根據你的顯卡的顯存來計算一下顯卡在24位真彩下可以以多大的分辨率顯示,計算是這樣的,用顯存的字節數÷3(24位色)=顯示器寬的象素數×顯示器高的象素數,寬的象素數:高的象素數=4:3,比如4兆顯存,就應該是4×1024×1024÷3=1365×1024。 在下面的小程序中,我們通過三個滾動條分別代表R、G、B,滾動滾動條,將在右邊的圖片框中顯示相應的顏色,并且在下面的文本框中顯示顏色的十六進制數值。 現在,新建一個項目文件,在Form1中如圖6-12布局控件,各控件屬性如下表: HsrollBar Name Hscroll1 Index 0、1、2 (共同屬性) Max 255 Min 0 LargeChange 10 SmallChange 1 Label Name Label1 Index 0、1、2 Index 0 Caption “紅:” Index 1 Caption “綠:” Index 2 Caption “藍:” Label Name Label2 Caption “顏色值” TextBox Name Text1 Text “” PictureBox Name Picuture1 為了把十進制數值換成十六進制數值,要使用一個叫做Hex()的函數,它把十進制數值轉化為十六進制的字符,但對于只有一位的十六進制字符,這個函數并不在高位補零,為了視覺上的正確,我設計了一個小函數幫助它給一位的十六進制字符補零.程序代碼很簡單,見下: Dim RedStr, GreenStr, BlueStr As String’RGB的字符 Dim RedNum, GreenNum, BlueNum As Integer’RGB的數值 Function GetColorValue()As String ‘獲得輸入值 RedNum = HScroll1(0).Value GreenNum = HScroll1(1).Value BlueNum = HScroll1(2).Value RedStr = Hex(RedNum)If Len(RedStr)< 2 Then RedStr = ”0“ + RedStr’補零 GreenStr = Hex(GreenNum)If Len(GreenStr)< 2 Then GreenStr = ”0“ + GreenStr BlueStr = Hex(BlueNum)If Len(BlueStr)< 2 Then BlueStr = ”0" + BlueStr GetColorValue = RedStr + GreenStr + BlueStr’合并 End Function Private Sub Form_Load() ‘初始化程序 Text1.Text = GetColorValue Picture1.BackColor = RGB(RedNum, GreenNum, BlueNum)'RGB函數返回顏色值 End Sub Private Sub HScroll1_Change(Index As Integer) ‘當滾動條被改變時 Text1.Text = GetColorValue Picture1.BackColor = RGB(RedNum, GreenNum, BlueNum) End Sub 運行如圖6-13。 列表框(ListBox)和復合列表框(ComboBox)也是我們經常見到的視窗元素,我們從它所列示的條目中選出所需的,兩種列表框只是在外觀上略有不同,但從本質和操作方法來說它們是很相象的,它們也有一些特殊的屬性: List屬性,你可以利于該屬性象列表框或復合列表框中添加條目,但也可以在程序設計中通過AddItem方法添加。 綜 合 性 實 驗 實 驗 名 稱:關閉標題包含指定字符的所有窗口 專 業 班 級: 學 生 姓 名: 學 號: 指 導 教 師: 需求分析: 關閉標題包含指定字符的所有窗口,使我們能更方便的關閉很多窗口,避免了一個一個關閉的麻煩 運行環境: WINDOWS XP系統;VB6.0; 3開發工具和編程語言 Visual Basic6.0語言; 4 系統設置: 下例程序運行后,單擊按鈕關閉標題包含“記事本”的所有窗口 '在窗體上放置 3 個控件,所有控件無需設置任何屬性,全部采用默認設置: ' Command1,Label1,Text1 Private Declare Function FindWindowEx Lib “user32” Alias “FindWindowExA”(ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String)As Long Private Declare Function PostMessage Lib “user32” Alias “PostMessageA”(ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long)As Long Private Declare Function GetWindowText Lib “user32” Alias “GetWindowTextA”(ByVal hWnd As Long, ByVal lpString As String, ByVal cch As Long)As Long Private Sub Form_Load()'設置控件初始狀態,實際可以在窗體設計階段完成 Dim S As Single Me.Caption = “關閉指定窗口”: Text1.Text = “記事本” Label1.AutoSize = True: Label1.Caption = “窗口標題包含的字符:” Command1.Caption = “關閉指定窗口” S = Label1.Height Label1.Move S, S Text1.Move S + Label1.Width, S * 0.5, S * 8, S * 2 Command1.Move S, S * 3, S * 8, S * 2 End Sub Private Sub Command1_Click()Dim hWnds As Long, nCap As String, nFind As String Dim S As Long, S1 As Long, nLong()As Long, nCount As Long S = 255: nFind = Text1.Text Do hWnds = FindWindowEx(0, hWnds, vbNullString, vbNullString)If hWnds = 0 Then Exit Do nCap = String(S + 1, “ ”)GetWindowText hWnds, nCap, S S1 = InStr(nCap, Chr(0))If S1 > 0 Then nCap = Left(nCap, S1-1)If InStr(nCap, nFind)> 0 Then ' PostMessage hWnds, &H10, 0, 0 '不在這里發送關閉消息,是為了防止漏查 nCount = nCount + 1 ReDim Preserve nLong(1 To nCount)nLong(nCount)= hWnds End If Loop For S = 1 To nCount PostMessage nLong(S), &H10, 0, 0 '發送關閉窗口消息 DoEvents Next End Sub 5參考文獻: 龔培增,楊志強Visual Basic程序設計教程( VB換膚(GUI界面) 第一種方法:后綴為.she文件的皮膚 SkinSharp換膚庫不是COM組件,無需進行系統注冊,僅以標準dll方式存在。 1.打開vb6開發環境,新建一個工程文件,并存檔 2.將一個名為“膚色”的文件夾和一個名為SkinH_VB6.dll的文件拷貝到工程所在的目錄 3.外部函數接口api函數原型,把這原形放在通用聲明段 Private Declare Function SkinH_AttachEx Lib “SkinH_VB6.dll”(ByVal lpSkinFile As String, ByVal lpPasswd As String)As Long 4.若需要什么樣的皮膚(即.she文件)就在相應的事件(比喻在Form_Load())中輸入下面的內容: SkinH_AttachEx App.Path & “/皮膚/vista.she”, “ ” app.path:系統字串常量,返回工程所在的路徑。 皮膚:是跟工程在同一目錄下的一個文件夾 vista.she:皮膚文件,可以把網上下載的.she文件放在同目錄下用時,只接按上四步驟即可。 第二種方法:ActiveSkin 4.3軟件的應用。可以自己更改皮膚 1.安裝ActiveSkin 4.3。同其它軟件安裝一樣。 2.漢化該軟件。直接運行setup.exe(漢化的安裝文件)。點下一步直至完成 3.新建一個VB工程文件,在工具箱灰白色地方右鍵單擊,選擇[部件],在部件對話框中勾選ActiveSkin 4.3后單擊[應用][確定] 4.在出現的兩個控件中選擇拖入到窗體上。右鍵單擊,選擇[編輯皮膚]即可到ActiveSkin 4.3中編輯皮膚 5.Label控件必須使用該部件給的ab控件來替換。原本的A是不會顯示 6.選擇相應的事件(如Form_Load())。在該事件中輸入: Skin1.ApplySkin Me.hWnd 7.如果要移植你的程序到別的機器上運行,請編譯打包。因為該皮膚需要系統其它文件來支持。所以你可以選擇VB-PowerWrap進行VB程序的封裝 VB與ACCESS2003數據庫連接相關步驟: 第一步:建立連接 1.引用相關組件:Microsoft ActiveX Data Objects 2.0 Library。Microsoft ADO Data Control 6.0 2.在通用聲明段申明:Dim mConn As ADODB.Connection 3.在對應的事件(如Form_Click())中:set mConn=New ADODB.Connection或Dim mConn As New ADODB.Connection 4.設置其連接字串(與磁盤上的MDB文件建立連接): mConn.ConnectionString=“Provider=Microsoft.jet.oledb.4.0;Data Source=” & App.Path & “RSData.mdb” 5.打開連接:mConn.Open 6.測試連接是否成功:if mConn.State=adStateOpen then msgbox “數據庫已經連接成功!” else msgbox “數據庫連接不成功!” 以上連接方法是在事件里完成,也可以把連接做一個過程,需要連接時直接帶參調用也可。如在模塊中這樣定義 Public conn As New ADODB.Connection Public Function DBConnection(FileName As String)As Boolean Set conn = New ADODB.Connection conn.ConnectionString = “provider=microsoft.jet.oledb.4.0;” & “data source=” & FileName conn.Open If conn.State = adStateOpen Then DBConnection = True Else DBConnection = False End If End Function 然后回事件中調該函數。其相應代碼如下: Private Sub Command2_Click() CommonDialog1.ShowOpen Text1.Text = CommonDialog1.FileName If DBConnection(Text1.Text)Then MsgBox “連接成功!” Else MsgBox “連接失敗!” End If End Sub 第二步:從數據庫中取出記錄,綁定到相對應的控件(Microsoft DataGrid Control 6.0(SP6)(OLEDB))中 1.在通用聲明段定義記錄對象: Dim rs As New ADODB.Recordset 2.在相應的事件(如Form_Click())中定義: Set rs = New ADODB.Recordset Dim sql As String sql = “select * from 部門表” rs.CursorLocation = adUseClient rs.Open sql, mConn, 1, 3 3.在窗體上從部件中找到Microsoft DataGrid Control 6.0(SP6)(OLEDB)并加載到工具箱上,然后產生一個實體對象,其名稱為DataGrid1 Set DataGrid1.DataSource = mRst.DataSource 注意:游標與鎖 0=adopenForwardonly:僅向前游標 — 除僅允許在記錄中向前滾動之外,其行為類似動態游標。這樣,當需要在 Recordset 中單程移動時就可提高性能。 1=adopenkeyset:鍵集游標 — 其行為類似動態游標,不同的只是禁止查看其他用戶添加的記錄,并禁止訪問其他用戶刪除的記錄,其他用戶所作的數據更改將依然可見。它始終支持書簽,因此允許 Recordset 中各種類型的移動。 2=adopenDynamic:動態游標 — 用于查看其他用戶所作的添加、更改和刪除,并用于不依賴書簽的 Recordset 中各種類型的移動。如果提供者支持,可使用書簽。3=adopenstatic:靜態游標 — 提供記錄集合的靜態副本以查找數據或生成報告。它始終支持書簽,因此允許 Recordset 中各種類型的移動。其他用戶所作的添加、更改或刪除將不可見。這是打開客戶端(ADOR)Recordset 對象時唯一允許使用的游標類型。 mRst.CursorLocation = adUseClient:使用由本地游標庫提供的客戶端游標 mRst.CursorLocation = adUseServer 默認值。使用數據提供者或驅動程序提供的游標。 1=adLockReadOnly 默認值,只讀。無法更改數據。 2=adLockPessimistic 保守式記錄鎖定(逐條)。提供者執行必要的操作確保成功編輯記錄,通常采用編輯時立即鎖定數據源的記錄的方式。 3=adLockOptimistic 開放式記錄鎖定(逐條)。提供者使用開放式鎖定,只在調用 Update 方法時鎖定記錄。 4=adLockBatchOptimistic 開放式批更新。用于與立即更新模式相反的批更新模式。 第三步:向數據庫中寫數據(找一個相應的事件,如Command1_Click()) Dim bmid As String,bmmc As String,sql As String Dim conn As New ADODB.Connection Dim rs As New ADODB.Recordset bmid = Text1.Text:bmmc = Text2.Text conn.ConnectionString = “provider=microsoft.jet.oledb.4.0;data source=” & App.Path & “rsdata.mdb” conn.Open On Error GoTo cancel: sql = “insert into 部門表(部門ID,部門名稱)values('” + bmid + “','” + bmmc + “')” rs.Open sql, conn cancel: If conn.Errors.Count = 0 Then Else MsgBox “寫數據有問題,主鍵重復” End If 除了用SQL語句增加庫記錄以外,也可以用下面的方法來增加庫記錄 rs.CursorType = adOpenKeyset rs.LockType = adLockOptimistic rs.Open “部門表”, conn, , , adCmdTable rs.AddNew rs.Fields(0)= bmid rs.Fields(1)= bmmc rs.Update 第四步:刪除數據庫中的一條記錄(找一個相應的事件,如Command2_Click()) Private Sub command2_click()Dim sql As String Dim conn As New ADODB.Connection Set rst = New ADODB.Recordset Dim bmid As String bmid = Trim(DataGrid1.Columns(0))conn.ConnectionString = “provider=microsoft.jet.oledb.4.0;data source=” & App.Path & “rsdata.mdb” conn.Open sql = “delete from 部門表 where 部門ID='” + bmid + “'” rst.Open sql, conn, 1, 3 sql = “select * from 部門表” rst.CursorLocation = adUseClient rst.Open sql, conn, 1, 3 if not rst.eof()then rst.movenext end if Set DataGrid1.DataSource = rst.DataSource set rst=nothing set conn=nothing End sub 第五步:更改數據庫中的信息(找一個相應的事件,如Command1_Click())Private Sub Command1_Click()Dim sql As String Dim conn As New ADODB.Connection Set rst = New ADODB.Recordset Dim s As String s = “實驗中心” conn.ConnectionString = “provider=microsoft.jet.oledb.4.0;data source=” & App.Path & “rsdata.mdb” conn.Open sql = “update 部門表 set 部門名稱='” + s + “' where 部門ID='001'” rst.Open sql, conn End Sub 第一步:建立連接 1.引用相關組件:Microsoft ActiveX Data Objects 2.0 Library。Microsoft ADO Data Control 6.0 Dim mConn As ADODB.Connection Private Sub Form_Click()set mConn=New ADODB.Connection或Dim mConn As New ADODB.Connection mConn.ConnectionString=“Provider=Microsoft.jet.oledb.4.0;Data Source=” & App.Path & “Police Information.mdb” mConn.Open if mConn.State=adStateOpen then msgbox “數據庫已經連接成功!” else msgbox “數據庫連接不成功!” End Sub 以上連接方法是在事件里完成,也可以把連接做一個過程,需要連接時直接帶參調用也可。如在模塊中這樣定義 Public conn As New ADODB.Connection Public Function DBConnection(FileName As String)As Boolean Set conn = New ADODB.Connection conn.ConnectionString = “provider=microsoft.jet.oledb.4.0;” & “data source=” & FileName conn.Open If conn.State = adStateOpen Then DBConnection = True Else DBConnection = False End If End Function 然后回事件中調該函數。其相應代碼如下: Private Sub Command2_Click() CommonDialog1.ShowOpen Text1.Text = CommonDialog1.FileName If DBConnection(Text1.Text)Then MsgBox “連接成功!” Else MsgBox “連接失敗!” End If End Sub VB程序設計基礎綜合性實驗 (七)-數組 (班級:學號:姓名:) 該綜合實驗是在學生完成前面的實驗,初步掌握順序結構、選擇結構和循環結構的程序設計方法。在此基礎上,通過本次綜合實驗掌握數組的聲明和數組元素的引用,掌握固定數組和動態數組的使用方法。 1.實驗目的通過本次綜合實驗掌握數組的聲明和數組元素的引用,掌握固定數組和動態數組的使用方法,學會利用數組解決一些較為復雜的問題。 2.實驗內容 1)創建一個應用程序,要求:用隨機數產生10個整數(其取值范圍為1~100),存放在數組x中,查找x數組中的最大元素及最小元素,并將最大元素及最小元素分別與數組的第1個和最后一個元素交換,分別輸出x數組交換前后各元素的值。 2)讀入10個整數到a[10],然后輸入一個整數m,(設數組a中各元素均不相同且m一定在a中),將與m相等的元素放置到數組的最后位置,其它元素的相對位置保持不變,輸出數組。 3.實驗要求: 1).掌握數組的聲明和數組元素的引用; 2).掌握固定數組和動態數組的使用方法; 4.實驗報告的要求 1)實驗目的根據教材和和課堂學習的知識要點,列出本次實驗要達到的目的。 2)實驗內容 描述實驗的具體內容,包括實驗題目要求、實驗過程和步驟。 3)設計和分析 程序設計說明,包括運行環境、界面設計、算法描述、流程圖等。 4)代碼設計 經調試正確的源程序。 5)結果討論 (1)具體分析程序的運行情況,包括對不同測試數據的運行結果,最后對運行結果進行分析。 (2)通過此次實驗,你有什么體會、有哪些收獲。 5.遞交實驗的相關文件 綜合學習探究 1.在“獻給母親的歌”的語文綜合性學習活動中,林曉梅同學深情地贊美了自己的母親。 請你參照畫線的文字,展開聯想想像,仿寫一個句子,同唱一首獻給母親的歌。母親得知我生病,忽匆匆趕到我的病床前。我微微睜開雙眼,發現母親正慈祥地看著我,那是一種怎樣的眼神啊!那是晨曦對嬌花的沐浴,那是春風對碧水的輕撫,那是①冬天陽光 對白雪的親吻②明月對清泉的細語。 2、某學校為幫助貧困山區的失學兒童重返課堂,要在全校開展一次獻愛心捐款、捐物、捐書活動。請你為這次活動擬一條校園標語(至少用一種修辭手法)。 (1)獻上一片愛心,托起一片希望;(2)或捐出一本圖書,送去一片陽光;(3)捐出一 件衣物,送去一份溫暖。 3、學校舉辦的“成長與讀書”活動進行到“讀古人詩文,明做人道理”的環節時,主持 人安排了《曹劌論戰》和《過零丁洋》的朗誦,請你為連接這兩個朗誦寫幾句串場詞。 剛才我們欣賞了某某同學朗誦的《曹判論戰》,如果說,曹劌在國家危難之際挺身而出,讓我們看到了古人“天下興亡,匹夫有責”的愛國情懷;那么,文天祥氣壯山河的詩句又會讓 我們看到古代仁人志士舍生取義的高尚美德。下面就讓我們來欣賞下一位同學朗誦的《過零 丁洋》。 4.長江中學學生會準備開展以“魅力語文”為主題的活動,假如你是該校的一名學生,一定會積極地參與到活動中去:相信你能完成以下任務。 (1)如果你來策劃,你準備設計哪些活動項目? 項目一:編演課本劇 項目二:對聯知識講座 項目三:詩歌朗誦會 (2)請你從自己設計的幾個項目中選一項,寫出開展這項活動的一個主要環節,并陳述設計該 環節的理由。 項目名稱:對聯知識講座 主要環節:讓主講者與學生互動對對聯 理由:可以增強活動的互動性、趣味性 5.考試前夕,在老師的指導下,你所在的班級經過一段時間的籌備,將舉行“迎考試、苦拚 搏、創佳績”的主題班會。你被老師指定為班會的主持人。按照預定程序,在頒發了“學習 進步顯著獎”之后,要讓獲獎者趙偉同學介紹成績提高的經驗。請你展開聯想或想象寫串聯 詞 我們為趙偉等幾名同學頒發了“學習進步顯著獎”,對我們人生有重要影響的中考就要到了 (迎中考),讓我們用積極進取的心態、刻苦拼搏的精神認真過好每一天(苦拼搏),用優異的成績給自己、給關心我們的人一個驚喜(創佳績)。下面我們用掌聲有請趙偉同學介紹他成績提高的經驗。第二篇:vb綜合實驗
第三篇:VB綜合實訓
第四篇:VB綜合實驗7_08_09
第五篇:綜合學習資料