⑴ vb編程例題
PrivateSubCommand1_Click()
Dima(10)AsInteger,xAsInteger
Randomize
Fori=1To10
a(i)=Int(Rnd()*51)
Printa(i);
Nexti
Print
x=InputBox("請輸入一個數:")
Fori=1To10
Ifa(i)=xThenExitFor
Nexti
Ifi<11Then
Print"a(";i;")=";x
Else
Print"未找到";x
EndIf
EndSub
⑵ VB編程實例
哦,你要多大的程序???
'初學vb的經典入門程序如下
'畫三個文本框,text屬性設為空
'畫四command按鈕,capition屬性分別設為「+」「-」「*」「/」
'把以下代碼復制到代碼窗口,運行,為text1,text2輸入數字,任意點擊一個按鈕看看
Private
Sub
Command1_Click()'這個叫click事件,用於滑鼠單擊時響應
Text3.Text
=
Val(Text1.Text)
+
Val(Text2.Text)
'command1("+")被點時運行這里
End
Sub
Private
Sub
Command2_Click()
Text3.Text供海垛剿艹濟訛汐番摟
=
Val(Text1.Text)
-
Val(Text2.Text)
'(-)被點時運行這里
End
Sub
Private
Sub
Command3_Click()
Text3.Text
=
Val(Text1.Text)
*
Val(Text2.Text)
'command3("*")被點時運行這里
End
Sub
Private
Sub
Command4_Click()
Text3.Text
=
Val(Text1.Text)
/
Val(Text2.Text)
'command4("/")被點時運行這里
End
Sub
⑶ vb編程實例
下面的代碼是利用三邊計算三角形面積
Private Sub Command1_Click()
a=val(text1.text)
b=val(text2.text)
c=val(text3.text)
p=(a+b+c)/2
s=sqr(p*(p-a)*(p-b)*(p-c))
if a+b>c and b+c>a and a+c>b then
text4.text="三角形的面積是:" & s
else
text4.text="不能構成三角形"
end if
end sub
下面是計算兩數之和的代碼
private sub command1_click()
a=val(text1.text)
b=val(text2.text)
text3.text=a+b
end sub
⑷ 如何使用vb
一個典型的VB進程VB的中心思想就是要便於程序員使用,無論是新手或者專家。VB使用了可以簡單建立應用程序的GUI系統,但是又可以開發相當復雜的程序。VB的程序是一種基於窗體的可視化組件安排的聯合,並且增加代碼來指定組建的屬性和方法。因為默認的屬性和方法已經有一部分定義在了組件內,所以程序員不用寫多少代碼就可以完成一個簡單的程序。過去的版本裡面VB程序的性能問題一直被放在了桌面上,但是隨著計算機速度的飛速增加,關於性能的爭論已經越來越少。
窗體控制項的增加和改變可以用拖放技術實現。一個排列滿控制項的工具箱用來顯示可用控制項(比如文本框或者按鈕]]。每個控制項都有自己的屬性和事件。默認的屬性值會在控制項創建的時候提供,但是程序員也可以進行更改。很多的屬性值可以在運行時候隨著用戶的動作和修改進行改動,這樣就形成了一個動態的程序。舉個例子來說:窗體的大小改變事件中加入了可以改變控制項位置的代碼,在運行時候每當用戶更改窗口大小,控制項也會隨之改變位置。在文本框中的文字改變事件中加入相應的代碼,程序就能夠在文字輸入的時候自動翻譯或者阻止某些字元的輸入。
VB的程序可以包含一個或多個窗體,或者是一個主窗體和多個子窗體,類似於操作系統的樣子。有很少功能的對話框窗口(比如沒有最大化和最小化按鈕的窗體)可以用來提供彈出功能。
VB的組件既可以擁有用戶界面,也可以沒有。這樣一來伺服器端程序就可以處理增加的模塊。
VB使用參數計算的方法來進行垃圾收集,這個方法中包含有大量的對象,提供基本的面向對象支持。因為越來越多組建的出現,程序員可以選用自己需要的擴展庫。和有些語言不一樣,VB對大小寫不敏感,但是能自動轉換關鍵詞到標準的大小寫狀態,以及強制使得符號表入口的實體的變數名稱遵循書寫規則。默認情況下字元串的比較是對大小寫敏感的,但是可以關閉這個功能。
VB使得大量的外界控制項有了自己的生存空間。大量的第三方控制項針對VB提供。VB也提供了建立、使用和重用這些控制項的方法,但是由於語言問題,從一個應用程序創建另外一個並不簡單。
⑸ 急!關於VB,簡單的程序設計
分類:電腦IT
四、數組中常見錯誤和注意事項
1.靜態數組聲明下標出現變數
n = InputBox("輸入數組的上界")
Dim a(1 To n) As Integer
2.數組下標越界
引用的下標比數組聲明時的下標范圍大或小。
Dim a(1 To 30) As Long, I as integer
a(1) = 1: a(2) = 1
For i = 3 To 30
a(i) = a(i - 2) + a(i - 1)
Next I
3.數組維數錯
數組聲明時的維數與引用數組元素時的維數不一致。
Dim a(3, 5) As Long
a(I)=10
4.Aarry函數使用問題
只能對Variant 的變數或動態數組賦值。
5.獲得數組的上界、下界
UBound 、Lbound函數
1.Dim數組聲明
有時用戶為了程序的通用性,聲明數組的上界用變數來表示,如下程序段:
n=InputBox("輸入數組的上界")
Dim a(1 To n)As Integer
程序運行時將在Dim語句處顯示"要求常數表達式"的出錯信息。即Dim語句中聲明的數組上、下界必須是常數,不能是變數。
解決程序通用的問題,一是將數組聲明的很大,這樣浪費一些存儲空間;二是利用動態數組,將上例改變如下:
Dim a()As Integer
n=InputBox ("輸入數組的上界")
ReDim a(1 To n) As Integer
2.數組下標越界
引用了不存在的數組元素,即下標比數組聲明時的下標范圍大或小。例如,要形成有如下30項的斐波那契數列:
1,1,2,3,5,8,13,21,34,…,317811,514229,832040
正確的程序段如下:
Dim a(1 To 30) As Long, i%
若將For i=3 To 30改為For i=1 To 30,程序運行時會顯示"下標越界"的出錯信息,因為開始循環時i=l,執行到循環體語句a(i)=a(i-2)+a(i-1),數組下標i-2、i-1均小於下界1。
同樣若將上例:a(i)=a(i-2)+a(i-1)語句改為:a(i+2)=a(i)+a(i+1)。
程序運行時也會顯示"下標越界"的出錯信息,這時是數組下標大於上界30。
3.數組維數錯
數組聲明時的維數與引用數組元素時的維數不一致。例如,下程序段為形成和顯示3×5的矩陣:
Dim a(3,5) As Long
For i=1 To 3
For j=1 To 5
a(i)=i*j
Print a(i);"";
Next j
Print
Next i
程序運行到a(i)=i*j語句時出現"維數錯誤"的信息,因為在Dim聲明時是二維數組,引用時的一個下標。
4.Array函數使用問題
Array函數可方便地對數組整體賦值,但此時只能聲明Variant的變數或僅由括弧括起的動態數組。賦值後的數組大小由賦值的個數決定。
例如,要將1,2,3,4,5,6,7這些值賦值給數組a,表2.5.1列出了三種錯誤及相應正確的賦值方法。
表2.5.1 Array函數表示方法
錯誤的Array函數賦值
改正的Aarry函數賦值
Dim a(1 To 8)
a=Array(1,2,3,4,5,6,7,8)
Dim a( ) a=Array(1,2,3,4,5,6,7)
Dim a As Integer a=Array(1,2,3,4,5,6,7)
Dim a a=Array(1,2,3,4,5,6,7)
Dim a
a()=Array(1,2,3,4,5,6,7)
Dim a a=Array(1,2,3,4,5,6,7)
5.如何獲得數組的上界、下界
Array函數可方便地對數組整體賦值,但在程序中如何獲得數組的-上界、下界,以保證訪問的數組元素在合法的范圍內,可使用UBound和LBound函數來決定數組訪問。
在上例中,若要列印a數組的各個值,可通過下面程序段實現:
For i=Lbound(A) To Ubound(A)
Print a(i)
Next i
6.給數組賦值
VB6.0提供了可對數組整體賦值的新功能,方便了數組對數組的賦值操作。但真正使用不那麼方便,有不少限制。數組賦值形式如下:
數組名2=數組名1
我們就此形式作討論:這里的數組名2,實際上在前面的數組聲明時,只能聲明為Variant的變數,賦值後的數組2的大小、維數、類型同數組名1;否則,若聲明成動態或靜態的數組,例如:
Dim數組名2()或Dim數組名2 (下標)
程序在運行到上述賦值語句時顯示"不能給數組賦值"的出錯信息。
所以,為了程序的安全、可靠,建議讀者還是忍痛割愛,少用VB6.0的這一新功能,使用傳統的循環結構來給數組賦值。基於此原因,我們也就在教程中不作展開。
五、過程中常見錯誤和注意事項
1.程序設計演算法問題
該章程序編寫難度較大,主要是演算法的構思有困難,這也是程序設計中最難學習的階段。經驗告訴每一位程序設計的初學者,沒有捷徑可走,多看、多練、知難而進。上機前一定要先編寫好程序,仔細分析、檢查,才能提高上機調試的效率。每當一個程序通過艱苦的努力調試通過時,那苦盡甘來的喜悅令你一言難盡。
2.確定自定義的過程是子過程還是函數過程
實際上過程是一個具有某種功能的獨立程序單位,供多次調用。子過程與函數過程的區別是前者子過程名無值,後者函數過程名有值。若過程有一個返回值,則習慣使用函數過程;若過程無返回值,則使用子過程,若過程返回多個值,一般使用子過程,通過實參與形參的結合帶回結果,當然也可通過函數過程名帶回一個,其餘結果通過實參與形參的結合帶回。
3.過程中形參的個數和傳遞方式的確定
對初學者,在定義過程時不能確定形參的個數和傳遞方式。
過程中參數的作用是實現過程與調用者的數據通信。一方面,調用者為子過程或函數過程提供初值,這是通過實參傳遞給形參實現的,另一方面,子過程或函數過程將結果傳遞給調用者,這是通過地址傳遞方式實現的,因此,決定形參的個數就是由上述兩方面決定的。對初學者,往往喜歡把過程體中用到的所有變數作為形參,這樣就增加了調用者的負擔和出錯概率,也有的初學者全部省略了形參,則無法實現數據的傳遞,既不能從調用者得到初值,也無法將計算結果傳遞給調用者。
VB中形參與實參的結合有傳值和傳地址兩種方式。區別如下:
(1)在定義形式上前者在形參前加即ByVal關鍵字。
(2)在作用上值傳遞只能從外界向過程傳入初值,但不能將結果傳出,而地址傳遞既可傳入又可傳出。
(3)如果實參是數組、自定義類型、對象變數等,形參只能是地址傳遞。
4.實參與形參類型對應問題
在地址傳遞方式時,調用過程實參與形參類型要一致。例如:
函數過程定義如下:
Public Function f!(x!)
f=x+x
End Function
主調程序如下:
Privme Sub Commandl_Click()
Dim y%
y=3
Print f(y)
End Sub
上例形參x是單精度型、實參y是整型,程序運行時會顯示"ByRef參數類型不符"的編譯出錯信息。
在值傳遞時,若是數值型,則實參按形參的類型將值傳遞給形參。例如:
函數過程定義如下:
Public Function f!(ByVal x%)
f=x+x
End Function
主調程序如下:
Priva~SubCommandI_Click()
Dim y!
Y=3.4
Print f(y)
End Sub
程序運行後顯示的結果是6。
5.變數的作用域問題
局部變數,在對該過程調用時,分配該變數的存儲空間,當過程調用結束,回收分配的存儲空間,也就是調用一次,初始化一次,變數不保值,窗體級變數,當窗體裝入,分配該變數的存儲空間,直到該窗體從內存卸掉,才回收該變數分配的存儲空間。
例如,要通過文本框輸入若干個值,每輸入一個按Eeter鍵,直到輸入的值為9999,輸入結束,求輸入的數的平均值。
Private Sub Textl_Key Press(Key Ascii As Integer)
Dim sum!,n%
If KeyAscii=13 Then
If Val(Text1)=9999 Then
sum=sum/n
Print sum
Else
Sum=sum+Text1
n=n+1
Text1=""
End If
End If
End Sub
該過程沒有語法錯,運行程序可輸入若干個數,但當輸入9999時,程序顯示"溢出"的錯誤。原因sum和n是局部變數,每按一個鍵,局部變數初始化為0,所以會有上述錯誤產生。
改進方法:將要保值的局部變數聲明為Static靜態變數或聲明為窗體級變數。也可將要保值的變數在通用聲明段進行聲明為窗體級變數。
6.遞歸調用出現"棧溢出"
如下求階乘的遞歸函數過程:
Public Functionfac(n As Integer)As integer
If n=1 Then
fac=1
Else
fac=n*fac(n-1)
End If
End Function
Private Sub Commandl_Click() '調用遞歸函數,顯示出fac(5)=120
Print "fac(5)";fac(5)
End Sub
當主調程序調用時,n的值為5時,顯示120結果;當n的值為-5時,顯示"溢出堆棧空間"的出錯信息。
實際上每遞歸調用一次,系統將當前狀態信息(形參、局部變數、調用結束時的返回地址)壓棧,直到到達遞歸結束條件。上例當n=5時,每遞歸調用一次,參數n-l,直到n=l遞歸調用結束,然後不斷從棧中彈出當前參數,直到棧空。而當n=-5時,參數n-1為-6、壓棧,再遞歸調用、n-1永遠到不了n=l的終止條件,直到棧滿,產生棧溢出的出錯信息。
所以設計遞歸過程時,一定要考慮過程中有終止的條件和終止時的值或某種操作,而且每遞歸調用一次,其中的參數要向終止方向收斂,否則就會產生棧溢出。
六、常用控制項常見錯誤和難點分析
1.遺漏對象名稱
在VB程序設計時,初學者常犯的一個錯誤是遺漏對象名稱,特別是在使用列表框時。例如,如果要引用列表框(List1)中當前選定的項目,Listl.list(Listlndex)是錯誤的。即使當前焦點在Listl上,VB也不是認為Listlndex是List l的屬性,而是一個變數。所以正確的引用方式是:Listl. 1ist(Listl.Listlndex)。
2.列表框的Columns屬性
列表框的Columns屬性決定列表框是水平還是垂直滾動以及如何顯示列中的項目。如果水平滾動,則Columns屬性決定顯示多少列,如表2.7.2所示。圖2.7.1是一個水平滾動兩列顯示的列表框。
在程序運行期間,該屬性是只讀的,也就是說,不能在運行時,將多列列表框變為單列列表框或將單列列表框變為多列列表框。
表2.7.2 列表框的Columns屬性
列數 屬 性
0(默認值)1到n 項目安排在一列中,且列表框豎直滾動項目安排在多個列中,先填第一列,再填第二列……列表框水平滾動並顯示指定數目的列
3.域級驗證
域級驗證是指輸入到某獨立域的數據的驗證,在域級驗證的過程中一般不考慮窗體一般其他域的內容。進行域級驗證的合適時間是:
(1)當往某域中輸入某個鍵時,此時涉及鍵盤事件(KeyDown、KeyUp和KeyPress)。
(2)當用戶企圖離開某域時,此時涉及CansesValidate屬性和Validate事件。
(3)當某域的內容發生變化時,此時涉及Change事件。
CausesValidation屬性和Validate事件通常是協同工作的。
CausesValidate屬性決定Validate事件是否發生。如果控制項的CausesValidate屬性為False,該控制項的Validate事件永遠不會發生。如果控制項的CausesValidate屬性為Tree,當焦點企圖移到(還沒有離開,也可以說離開之前)另一個CausesValidate屬性為True的控制項時,原控制項的Validate事件發生:當焦點企圖移到另一個CausesValidate屬性為False的控制項時,原控制項的Validate事件暫時不發生,什麼時候發生?直到焦點移到一個CausesValidate屬性為True的控制項上時才發生。
例如,假定有如圖2.7.2所示的程序。當焦點企圖從Textl移到Text2時,Textl的Validate事件發生,同樣當焦點企圖從Text2移到Textl時,Text2的Validate事件發生。當焦點企圖從Textl移到Text3時,TextI的Validate事件暫時沒有發生,因為Text3的CausesValidate為False,然後如果焦點企圖繼續移動到Text2時,Textl的Validate事件才發生。
圖2.7.2 CausesValidate屬性和Validate事件
CausesValidate屬性和Validate事件的這一特性常常應用在如圖2.7.3所示的程序中。當在文本框中輸入了無效數據時而又不知道如何輸入有效數據時,用戶往往選擇Help命令尋求幫助或選擇Cancel命令結束數據輸入,此時不希望執行驗證程序。因為如果執行驗證程序且發現了無效數據,則無法選擇Help或Cancel了,用戶就這樣被套住了。現在只要將文本框的CausesValidate屬性設為True,命令按鈕的CausesValidate屬性為False,驗證程序放在 Validate過程中,問題就解決了。在默認情況下,所有控制項的CausesValidation屬性都為Tree。
圖2.7.3 命令按鈕的CausesValidate屬性和Validate事件
並不是所有的控制項都有Validate事件。只有那些能用於輸入數據的控制項(如文本框、復選框、滾動條等)才有這個事件。Validate事件過程如下:
Privme Sub object_Validate(Cancel As Boolean)
…
EndSub
其中,當參數Cancel被設為Tree後,焦點將不會離開對象。
如果要將實驗七第1題改用Validate事件和CausesValidation屬性實現數據驗證,則應有如下的程序。
Sub txtMath_Validate(Cancel As Boolean)
If Val(txtMath.Text)<0 Or _
Val(txtMath.Text)>100 Then
Cancel=True
End If
End Sub
1.窗體頂部菜單欄中的菜單項與子菜單中的菜單項的區別
窗體頂部菜單欄中的菜單項與子菜單中的菜單項都是在菜單編輯器中定義的,但是它們是有區別的。
(1)窗體頂部菜單欄中的菜單項不能定義快捷鍵,而子菜單中的菜單項可以有快捷鍵。
(2)當有熱鍵字母(菜單標題中"&"後的字母)時,按Alt+熱鍵字母選擇窗體頂部菜單欄中的菜單項,按熱鍵字母選擇子菜單中的菜單項(當子菜單打開時)。子菜單沒有打開時,按熱鍵字母無法選擇其中的菜單項。
(3)盡管所有的菜單項都能響應Click事件,但是窗體頂部菜單欄中的菜單項不需要編寫事件過程。
2.在程序中對通用對話框的屬性設置不起作用
在程序中對通用對話框的屬性設置不起作用,多數情況是因為在彈出對話框後才進行屬性設置。例如,下面的程序代碼就存在這樣的問題,改正方法是將彈出對話框語句放到最後,即把CommonDialogl.Action=l放在所有屬性設置語句的後面。
CommonDialog1.Action=1
ConmaonDialog1.FileName="*.Bmp"
CommonDialogl.InitDir="C:\Windows"
CommonDialog1.Filter="Pictures(*.Bmp)|*.Bmp|All Files(*.*)|*.*"
CommonDialog1.FilterIndex=1
3.在工程中添加現有窗體時發生載入錯誤
在使用"工程"菜單中的"添加窗體"命令添加一個現存的窗體時經常發生載入錯誤,絕大多數是因為窗體名稱沖突的緣故。例如,假定當前打開了一個含有名稱為Forml的工程,如果想把屬於另一個工程的Forml窗體裝入則肯定會出錯。
[注意]
窗體名與窗體文件名的區別。在一個工程中,可以有兩個窗體文件名相同的窗體(分布在不同的文件夾中),但是絕對不能同時出現兩個窗體名相同的窗體。
4.實時菜單的創建
實時菜單是由應用程序根據需要動態創建的。在VB中,常見的實時菜單是"文件"菜單,該菜單顯示了最近所使用的工程。
創建實時菜單必須結合控制項數組,用Load語句創建菜單項,用UnLoad清除菜單項。
創建實時菜單的步驟:
(1)在菜單編輯器中建立樣本菜單項
樣本菜單項的屬性設置見表2.8.4所示。設置Index為0,表明樣本菜單項是控制項數組的一個元素,其下標為0。樣本菜單項的Name屬性是必須的,它將作為控制項數組的名稱。在下面假定數組名為NameArray。Visible可以設為True,設為False表示初始時該菜單項不可見。
表2.8.4 實時菜單樣本菜單項
屬性 Name Caption Index Visible
設置值 必需的 可以沒有 0 False
(2)在程序中用Load語句創建菜單項
例如,Load NameArray(1)創建一個新的菜單項(在控制項數組中的下標為1,然後將其 Visible屬性設置True,同時設置Caption屬性。
動態創建的菜單項繼承了除了Index之外的絕大部分屬性,所以要對Caption和Visible屬性進行設置。另外,樣本菜單項在菜單系統中的位置決定了新菜單項出現的位置。
(3)為實時菜單項編寫代碼
每個實時菜單項都是控制項數組的一個成員,具有相同的名稱,並且共享事件過程。
下面是一個實時菜單項代碼示例:
SubNameArray_Click(Index As Integer)
Select Case Index
Case 0
MsgBox("NameArmy(0)(樣本菜單項) is clicked!")
Case 1
MsgBox("NameArray(1)(第一個實購菜單項) is clicked!")
Case 2
MsgBox("NameArray(2)(第二個實時菜單項) is clicked!")
End Select
End Sub
(4)刪除實時菜單項
盡管把Visible設為False,程序運行時實時菜單項不會顯示,然而有時還是需要把實時菜單項從內存中銷毀。刪除實時菜單使用UnLoad語句。例如,LoadNameArray(1)。
有關建立實時菜單的詳細內容請參閱教程第4.3節。
5.通用對話框的CancelError屬性和Err對象
當通用對話框的CancelError屬性為True時,無論何時選擇"取消"按鈕,均產生 32755(cdlCancel)號錯誤,即將Err的Number屬性設置為32755。
Err是VB的一個系統對象,它記錄了程序運行期間所發生的錯誤。
Err對象的重要屬性有Number(默認屬性)和Description。當錯誤發生後,錯誤的生成者把錯誤號和有關錯誤的說明分別存放在Number和Description屬性中。例如,當在 CancelError屬性為True的通用對話框中選擇"取消"按鈕時,產生一個錯誤,Err對象的Number和Description屬性將被設置為32755和"選擇'取消'"。
在程序運行期間,經常會發生各種各樣的錯誤。有關錯誤處理的詳細內容請參閱教程第 9.6節。
下面是當程序產生cdlCancel錯誤時結束程序的運行。
SubForm_ClickO
CommonDialogl.CancelError=True
On Error GoTo ErrorHandler
CommonDialogl.Action=l
' 處理文件的語句
ErrorHandler:
If Err.Number=cdlCancel Then
End
Endlf
End Sub
6.與窗體有關的事件
在首次用Load語句將窗體(假定該窗體在內存中還沒有創建)調入內存之時依次發生 Initialize和Load事件。再用UnLoad將窗體從內存中卸載時依次發生QueryUnLoad和Unload事件,再使用Set窗體名=Nothing語句解除初始化時發生Terminate事件。
Initialize是在窗體創建時發生的事件。在窗體的整個生命周期中,Initialize事件只觸發一次。用戶可以將一個窗體裝入內存或從內存中刪除很多次,但窗體的建立只有一次。也就是說,在用Load語句將窗體裝入內存時會觸發Load事件,但並不一定觸發Initialize事件。
在用UnLoad語句卸載窗體後,如果沒有使用Set窗體名=Nothing解除初始化,則在下次使用Load語句時不會觸發Initialize事件,否則會引起Initialize事件。
假定有Forml和Form2兩個窗體,並且有下列事件過程:
' Forml窗體事件過程
Sub Form_Click()
Debug.Print"窗體首次裝入內存時發生的事件:"
Load Form2
Debug.Print"用Unload卸載窗體時發生的事件:"
UnloadForm2
Debug.Print "窗體第二次裝入內存時發生的事件:"
Load Form2
Debug.Print "用Unload卸載窗體時發生的事件:"
Unload Form2
Debug.Print "用Set窗體名=Nothing語句解除初始化時發生的事件:"
Set Form2=Nothing
Debug.Print "窗體第三次(解除初始化後)裝入內存時發生的事件:"
Load Form2
End Sub
'Form2窗體事件過程
Sub Form_Initialize()
Debug.Print"Initialize事件"
End Sub
Sub Form_Lond()
Debug.Pnnt"Load事件"
End Sub
Sub Form_QueryUnload(Cancel As hteger, UnloadMode As Integer)
Debug.Print"QueryUnload"
End Sub
Sub Form_Unlond(Cancel As Integer)
Debug.Print"Unload"
End Sub
Sub Form_Terminate()
Debug.Print"Terminate"
End Sub
當用戶在Form1上單擊時,在Debug窗口顯示下列信息:
窗體首次轉入內存時發生的事件:
Initialize事件
Load事件
用Unload卸載窗體時發生的事件:
Query Unload
Unload
窗體第二次裝入內存時發生的事件:
Load事件
用Unload卸載窗體時發生的事件:
QueryUnload
Unload
用Set窗體名=Nothing語句解除初始化時發生的事件:
Terminate
窗體第三次(解除初始化後)裝入內存時發生的事件:
Initialize事件
Load事件
7.MouseDown、MOUSeUp和C1ick事件發生的次序
當用戶在窗體或控制項上按下滑鼠按鈕時MouseDown事件被觸發,MouseDown事件肯定發生在MouseUp和C1ick事件之前。但是,MouseUp和Click事件發生的次序與單擊的對象有關。
當用戶在標簽、文本框或窗體上作單擊時,其順序為:
(1)MouseDown
(2)MouseUp
(3)Click
當用戶在命令按鈕上作單擊時,其順序為:
(1)MouseDown
(2)Click
(3)MouseUp
當用戶在標簽或文本框上作雙擊時,其順序為:
(1)MouseDown
(2)MOuseUp
(3)Click
(4)DblCUck
(5)MouseUp
七、文件常見錯誤和難點分析
1.文件系統的三個控制項不能產生關聯
也就是當驅動器改變時,目錄列表框不能跟著相應改變;或者當目錄列表框改變時,文件列表框不能跟著相應改變。要三個控制項產生關聯,使用下面兩個事件過程:
Private Sub Drivel_Change()
Dirl.Path=Drivel.Drive
End Sub
Private Sub Dirl_Change()
Filel.Path=Dirl.Path
End Sub
2.如何在目錄列表框表示當前選定的目錄
在程序運行時雙擊目錄列表框的某目錄項,則將該目錄項改變為當前目錄,其Diirl. Path的值作相應的改變。而當單擊選定該目錄項時,Diirl. Path的值並沒有改變。有時為了對選定的目錄項進行有關的操作,與ListBox控制項中某列表項的選定相對應,表示如下:
Dirl.List(Dirl.Listlndex)
3.當使用文件系統控制項對文件進行打開操作時,顯示"文件未找到"出錯信息。
例如,如下語句:
Open Filel.Path+Filel.File Name For Input As#1
當選定的目錄是根目錄,上述語句執行正確,而當選定的目錄為子目錄,上述語句執行時顯示"文件末找到"出錯信息。
其中:Filel.Path表示當前選定的路徑,Filel.File Name表示當前選定的文件,合起來表示文件的標識符。
當選定的文件在根目錄下(假定驅動器為C),Filel.Path的值為"C:\1",假定選定的文件名為"t1.txt",則Filel.Path+Filel.FileName的值為"C:\t1.txt"為合法的文件標識符。
當選定的文件在子目錄下(假定驅動器為C,子目錄為my),Filel.Path的值為"C:\my" Filel.Path+Filel.FileName的值為"C:\my tl.txt",子目錄與文件名之間少了一個"\"分隔符。
為了保證程序正常運行,
Open Filel.Path+Filel.FileNameForlnput As #1改為:
Dun F$
If Right(Filel.Path,1)"\" Then ' 表示選定的足根目錄
F=Filel.Path+Filel.FileName
Else ' 表示選定的是子目錄,子目錄與文件名之間加"\"
F=Filel.Path+"\"+Filel.FileName
End If
Open F For Input As # 1
4.Open語句中欲打開的名是常量也可以是字元串變數,但使用者概念不清,導致出現"文件未找到"出錯信息
如在從盤上讀入文件名為"C:\my\t1.txt",
正確的常量書寫如下:
Open "C:\my\t1.txt"For Input As#1 ' 錯誤的書寫常量兩邊少雙引號
或正確的變數書寫如下:
Dim F$
F="C:\my\t1.txt"
Open F For Input As #1 ' 錯誤的書寫變數F兩邊多了雙引號
5.文件沒有關閉又被打開,顯示"文件已打開"的出錯信息
如下語句:
Open"C:\my\t1.txt" For Input As #1
Print F
Open "C:\my\t1.txt" For Input As #1
Print "2";F
執行到第二句Open語句時顯示"文件已打開"的出錯信息。
6.如何讀出隨機文件中的所有記錄,但又不知道記錄號。
不知道記錄號而又要全部讀出記錄,則只要同順序文件的讀取相似,採用循環結構加無記錄號的Get語句即可,程序段如下:
Do While Not EOF(1)
Get #1, , j
Print j;
Loop
隨機文件讀寫時可不寫記錄號,表示讀時自動讀下一條記錄,寫時插入到當前記錄後。
⑹ vb程序設計實例
Private Sub Form_Activate()
'1年期2.25%,2年期2.43%,3年期為2.70%,5年期為2.88%(不記復利)。今有X元,5年以後使用,共有如下6中存法:
Const x1 As Double = 0.0225, x2 As Double = 0.0243, x3 As Double = 0.027, x5 As Double = 0.0288
Dim x As Double
x = Val(InputBox(""))
Print "①存一次5年期,5年後到期的本息合計"; ss(x, 5, x5)
Print "②存一次3年期,一次2年期,5年後到期的本息合計"; ss(ss(x, 3, x3), 2, x2)
Print "③存一次3年期,兩次1年期,5年後到期的本息合計"; ss(ss(ss(x, 3, x3), 1, x1), 1, x1)
Print "④存兩次2年期,一次1年期,5年後到期的本息合計"; ss(ss(ss(x, 2, x2), 2, x2), 1, x1)
Print "⑤存一次2年期,三次1年期,5年後到期的本息合計"; ss(ss(ss(ss(x, 2, x2), 1, x1), 1, x1), 1, x1)
Print "⑥存五次1年期,5年後到期的本息合計"; ss(ss(ss(ss(ss(x, 1, x1), 1, x1), 1, x1), 1, x1), 1, x1)
End Sub
Private Function ss(ByVal a As Double, b As Integer, c As Double) As Double
ss = a + a * c * b
End Function
Private Sub Form_Load()
AutoRedraw = True
End Sub
⑺ 求解:vb編程的運作原理、越詳細越好、最好能舉個例子;
編程原理與編程語言
我們都知道,基於二進位制原理的計算機使用一種只包含 1 和 0 的簡單語言,其中 1 表示「開」,0 表示「關」。顯然,要掌握這樣一種語言對大多數人來說是不可能的,在這樣的背景下,編程語言就應運而生了。
編程語言相當於我們的語言和計算機語言之間的翻譯。您可以不必學習只包含 1 和 0 的簡單語言(機器語言),而是可以使用編程語言(如VB),以一種更易於學習和理解的方式向計算機發出指令。
那麼編程語言是如何轉化為機器語言的呢?這就要歸功於一種稱為「編譯器」的專用程序,它的作用是接受用編程語言編寫的指令,並將這些指令轉換為機器語言。也就是說,我們只需要了解 Visual Basic 編程語言的工作原理,就可以通過編譯器將自己編寫的代碼轉換為只使用1 和 0 的機器語言。
⑻ vb 例子
1..
Dim Words, Chars, MyString
For Words = 10 To 1 Step -1 ' 建立 10 次循環。
For Chars = 0 To 9 ' 建立 10 次循環。
MyString = MyString & Chars ' 將數字添加到字元串中。
Next Chars ' Increment counter
MyString = MyString & " " ' 添加一個空格。
Next Words
2.
Do...Loop 語句示例
本示例示範如何使用 Do...Loop 語句。內層的 Do...Loop 語句循環到第 10 次時將標志值設置為 False,並用 Exit Do 語句強制退出內層循環。外層循環則在檢查到標志值為 False 時,馬上退出。
Dim Check, Counter
Check = True: Counter = 0 ' 設置變數初始值。
Do ' 外層循環。
Do While Counter < 20 ' 內層循環。
Counter = Counter + 1 ' 計數器加一。
If Counter = 10 Then ' 如果條件成立。
Check = False ' 將標志值設成 False。
Exit Do ' 退出內層循環。
End If
Loop
Loop Until Check = False ' 退出外層循環。
3.
While...Wend 語句示例
本示例使用 While...Wend 語句來增加計數變數的值。如果條件判斷值為 True,則循環內的語句將一直執行下去。
Dim Counter
Counter = 0 ' 設置變數初值。
While Counter < 20 ' 測試計數器的值。
Counter = Counter + 1 ' 將計數器的值加一。
Wend ' 當 Counter > 19 時則循環終止。
Debug.Print Counter ' 在「立即」窗口中顯示數字 20。
Select Case 語句示例
本示例使用 Select Case 語句來判斷變數的值。示例中第二個 Case 子句包含了變數值,故只有此區塊內的語句會被完成到。
Dim Number
Number = 8 ' 設置變數初值。
Select Case Number ' 判斷 Number 的值。
Case 1 To 5 ' Number 的值在 1 到 5 之間,包含1 和 5 。
Debug.Print "Between 1 and 5"
' 下一個 Case 子句是本示例中唯一判斷值為 True 的子句。
Case 6, 7, 8 ' Number 的值在 6 到 8 之間。
Debug.Print "Between 6 and 8"
Case 9 到 10 ' Number 的值為 9 或 10。
Debug.Print "Greater than 8"
Case Else ' 其他數值。
Debug.Print "Not between 1 and 10"
End Select
⑼ 求VB編程實例教程
你到這個網站下一下關於VB的書來看,
很多適合初級學習的書。
比如《VB6.0循序漸進教程》等,
努力!
⑽ 幫忙解釋如下的vb程序 每一步的都需要詳細 謝謝
Dim s(10) As Integer '申明一數組
Dim c As Integer '申明變數
For i = 1 To 10 '循環10次
s(i) = InputBox("請輸入數值") '獲得輸入
c = c + s(i) '將輸入的值保持在變數c中,循環完畢,c就是10個數的總和
Next
'以下是求最大值
max = s(1) '現將數組第一個元素假定為最大值存儲在變數max中
For j = 1 To 10 '循環10次
If s(j) > max Then '將當前數組元素的值與max比較,
max = s(j) '如比max大,將當前元素存在max中
End If
Next j
'這段求最小值,同上邊的求最大值
min = s(1)
For k = 1 To 10
If s(k) < min Then
min = s(k)
End If
Next k
'最後將求出來的值分別列印出來
Print "10個數字的和"; c; "平均值"; c / 10; "最大值"; max; "最小值"; min