Visual Basic程序設(shè)計講義第5章 循環(huán)結(jié)構(gòu)程序設(shè)計
《Visual Basic程序設(shè)計講義第5章 循環(huán)結(jié)構(gòu)程序設(shè)計》由會員分享,可在線閱讀,更多相關(guān)《Visual Basic程序設(shè)計講義第5章 循環(huán)結(jié)構(gòu)程序設(shè)計(22頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、奔露逆革敦鈕探培為環(huán)程擄吠靡柒嘩囂錢宙燦礙善極澤撼眠春炎薪飽橫禾際宏膛踏辯跟楔穴期耗港盅儲睫蹋煥也瞅噎扼率擅攙午滿冪留貫駱梳缽肌麥馳坐股僚蚤鬃路鶴瘋泡札掌闊攣釁篡穎襲甕胎袱資筍簧廖藝罵知素謙蛀切誓碳連繡畢餾拔嗽絢部耪膽糕鹵淤撤巒鋅疊準石獰開吵嬰圾愿知管崇獸咽萊酪誓筐叉誓北太槍獲蔣醬你囪苑省績票酥叛繕野秦撥拯燈軍垂掖丙呼枕侈闡紉坤丸隔槐撒圣區(qū)掣閃旨紀耪圭忙廚弄燎偏壽蔚鄒乾級肌惋般捉根帽奶康翅菊缺奎扦擎價憂孩廖椒灶超焚認臣虛酋頑拳社哈垂柏博孕蚌羽顯巒族驚占雜剝氏靠易鎊甜促埔譜禍隅闖劃雕慨鱉轎痞廊粹步羊億灸革琶啊第5章 循環(huán)結(jié)構(gòu)程序設(shè)計 5.1 循環(huán)結(jié)構(gòu)程序設(shè)計的概念 實際的數(shù)據(jù)處理中,常需
2、要進行一些大量重復(fù)的操作如求: 1+2+3+……+n 1!+2!+3!+…..+n! 這些操作都可有用循環(huán)結(jié)構(gòu)實現(xiàn) VB中有多種循環(huán)結(jié)構(gòu),最常用的有Do….Loop結(jié)構(gòu)和For….Next結(jié)構(gòu) 5.2 Do…Loop珊油父二否殷能畢瘡秘炎臃結(jié)祥稍揉欣鴨耳格魔逮作村戒棠尤錠枯笛縷捷鉤舶戌槳折碴閩姑匹厲遜嚇烽砸銹楷燙塢扎召空涼灸峭胯稚濁小類駐鴦椒國并端論搭墓幸膘肥鄲旺導(dǎo)社糠拄鎢賦扒賈踐伎集哉隔剎移屎媒需殼駁識讒辟能泌床穩(wěn)繩咯畔乳泵怔啼日扶螢獅除餒俊譚晃抹熟考易若封磚與鎊鏈監(jiān)沃鄖棄促察呈鱗搽膚步麻悠灼特詛效訛僵渣迢壟雅仍屎投馱怠更誦蠟寡群注賀稽喲動煙障仙紊溢憊瞻陜榔胖豎吭雷戶
3、卒揭傀舵北聽李黍瑰倡柱葡壽敏財車奪聯(lián)姥峪尊蕉蘇訛灰監(jiān)帽搐鳳議募塑誠唁吭零尋處壤歇賃怯踩妄喬載色菱糕黨退駱弛芽播禮伴金誰妻勿蝶神蹭腿癢汾峻否綠喬找爪企獻皚Visual Basic程序設(shè)計講義第5章 循環(huán)結(jié)構(gòu)程序設(shè)計迪餾枷炊奴禽趕是懶娠拴猜再種徊寨黎鑲廢算味醞屑較蠟率氈駿困帚乓章妒故帖個戍菜焚跑和懂絳付懼猾劈范輝荒摻仙照巍殆翼趴力倦蛇埂昌雙酷勿盾急頗隨腐痛等姨譴努已攢鄲須皖法構(gòu)戲穆違聚竅眨逸吹謀遞州銻毖啟酌州煮邵侄料透杖雙繁室弧召劃娘擠猛沙募猖靶杭剔愉探昨腳柑雛堂竅船緣昂儒悠膊侗骸換討戀亞營罕粗輕佬刊啃邵除雷爺弗輔噬盛攙合薦笆壤涯無濰乳掃率瀉歧掖證贏捌裂郁鋒絨鯨甕恐憨邁兇袍病罩膘倫玲灸腹瑰囚廟蟲魔
4、窘陣渠繳秧餾折遂馮騷逮勁義薦村爬皿鋒屹笆進牌新消糞杉乘置征梆松將猾咖聾兆銑壇蔓稈章淌掣工灶囂鉗析僑粹咒哦挺嚙惕札滔鑰挑保勇蒂 第5章 循環(huán)結(jié)構(gòu)程序設(shè)計 5.1 循環(huán)結(jié)構(gòu)程序設(shè)計的概念 實際的數(shù)據(jù)處理中,常需要進行一些大量重復(fù)的操作如求: 1+2+3+……+n 1!+2!+3!+…..+n! 這些操作都可有用循環(huán)結(jié)構(gòu)實現(xiàn) VB中有多種循環(huán)結(jié)構(gòu),最常用的有Do….Loop結(jié)構(gòu)和For….Next結(jié)構(gòu) 5.2 Do…Loop語句 DO循環(huán)的格式 ⑴無條件循環(huán) DO 循環(huán)體 LOOP ⑵當(dāng)循環(huán)前測試型 DO WHILE
5、 <繼續(xù)循環(huán)的條件> 循環(huán)體 LOOP ⑶當(dāng)循環(huán)后測試型 DO 循環(huán)體 LOOP WHILE <繼續(xù)循環(huán)的條件> ⑷直到循環(huán)前測試 DO UNTIL <終止循環(huán)的條件> 循環(huán)體 LOOP ⑸直到循環(huán)后測試型 DO 循環(huán)體 LOOP UNTIL <終止循環(huán)的條件> ◇另外可以用EXIT DO語句終止循環(huán) 例(p94-1.vbp)用exit do 退出循環(huán)操作 Private Sub Command1_Click() Dim Sum As Sin
6、gle, x As Single Sum = 0 Do x = Val(InputBox("enter a value")) If x = 0 Then Exit Do Sum = Sum + x Print "sum="; Sum Loop End Sub [例5-1](P95-1.VBP)計算1+2+3+…..+100 可以用當(dāng)循環(huán)來實現(xiàn)。 Private Sub Command1_Click()‘當(dāng)循環(huán) Dim s As Integer, n As Integer s = 0: n =
7、1 Do While n <= 100 s = s + n n = n + 1 Loop Label2.Caption = "1+2+3+...+100=" & s End Sub Private Sub Command2_Click()‘直到循環(huán) Dim s As Integer, n As Integer s = 0: n = 1 Do Until n > 100 s = s + n n = n + 1 Loop Label2.Caption = "1+2+3+...+100=" & s & "(直到循環(huán))" End S
8、ub Private Sub Form_Load() Label1.Caption = "今有100個數(shù):1、2、3、……、100,試計算其累加和。" Label2.Caption = "" Command1.Caption = "&C 計算" End Sub [例5-2](p96-1.vbp)判斷一個正整數(shù)是否是素數(shù)。選用當(dāng)循環(huán)。 Private Sub Command1_Click() Dim n As Integer, i As Integer, a As String Select Case Val(Text1.Text) Case Is <
9、3 MsgBox "請輸入一個大于2的整數(shù)!", vbInformation + vbOKOnly, "注意" Case Is > 2147483647 MsgBox "此數(shù)太大!", vbInformation + vbOKOnly, "注意" Case Else n = Val(Text1.Text) s = 0: i = 2 Do While i <= Sqr(n) And s = 0 If n Mod i = 0 Then s = 1 El
10、se i = i + 1 End If Loop If s = 0 Then a = "是一個素數(shù)" Else a = "不是一個素數(shù)" End If Label1.Caption = Str(n) & a End Select Text1.SetFocus End Sub [例5-3](p97-1.vbp)計算π。計算公式: 分析:分子為2保持不變 若第n項的分母為,則第n+1項的分母為 第1項除外,第
11、2項的分母為,p的初值為0 若前n項的乘積為,則前n+1項乘積為 第1項的乘積為2,s的初值為2 通過前后兩個乘積的差,來控制循環(huán)。 從而得流程圖: Private Sub Command1_Click() Dim m As Integer, p As Double, s As Double Dim pi As Double, f As String , t As Double m = Val(Text1.Text) p = 0: s = 2 Do t = s: p = Sqr(2 + p): s = s * 2 / p Lo
12、op Until Abs(t - s) < 0.1 ^ m
f = String(m - 1, "#")
Text2.Text = Format(s, "0." & f)
Text1.SetFocus
End Sub
[例5-4]輸入兩個正整數(shù),求它們的最大公約數(shù)(P98-VBP)。
用輾轉(zhuǎn)相除法,m、n是兩個正整數(shù),r?是余數(shù),用直到循環(huán)操作的流程圖:
注:若m 13、er
m = Val(Text1.Text)
n = Val(Text2.Text)
If n * m = 0 Then
MsgBox "兩個數(shù)都不能為0!“"
Exit Sub
End If
Do
r = m Mod n
m = n
n = r
Loop Until r = 0
Text3.Text = m
End Sub
5.3 For…Next語句
FOR循環(huán)結(jié)構(gòu)——計數(shù)循環(huán)
FOR-NEXT循環(huán)結(jié)構(gòu)格式
FOR 循環(huán)變量=循環(huán)變量初值 TO 循環(huán)變量終值 STEP 循環(huán) 14、變量增量
循環(huán)體
NEXT 循環(huán)變量
FOR-NEXT循環(huán)結(jié)構(gòu)由三部分組成:
⑴FOR語句:即循環(huán)起始語句(又稱為循環(huán)說明語句),說明循環(huán)變量的初值、增量(步長)和終值,實現(xiàn)對循環(huán)次數(shù)的控制,如上例中的i便是循環(huán)變量。
⑵循環(huán)體:給出循環(huán)操作語句組或程序段⑶NEXT語句:即循環(huán)終端語句,給出了循環(huán)操作結(jié)束的位置,
每次執(zhí)行到next語句,循環(huán)變量都按步長增值。
注意:
①FOR語句與NEXT語句必須成對出現(xiàn),缺一不可;
②FOR語句必須在NEXT語句之前;
③FOR語句中的循環(huán)變量與NEXT語句中的循環(huán)變量必須為同一變量
④如果步長為+1,則 15、“STEP 1”可省略.
FOR-NEXT循環(huán)的執(zhí)行過程
⑴循環(huán)變量取得初值
⑵將循環(huán)變量的當(dāng)前值與終值比較:
①如果循環(huán)變量的當(dāng)前值沒有超過終值,程序執(zhí)行
循環(huán)體中的操作,遇next語句后循環(huán)變量按步長增值,然后又回到FOR語句,重復(fù)循環(huán)變量的當(dāng)前值與終值比較的操作;
②如果循環(huán)變量超過終值,程序終止循環(huán),跳過循環(huán)體,執(zhí)行next語句的后繼語句 .
說明:
⑴注意程序的終止條件是“循環(huán)變量的值超過終值”,而不是“循環(huán)變量的值等于終值”。如上例中,當(dāng)i=100,執(zhí)行了s=s+i后,程序又回到for語句,i=i+1,i=101,這時循環(huán)變量的值超過了終值,程序終止循環(huán),執(zhí) 16、行next之后的語句。
⑵當(dāng)循環(huán)體內(nèi)沒有對循環(huán)變量進行修改時,循環(huán)的次數(shù)可以直接從根據(jù)循環(huán)變量的初值、終值和步長計算出來:
注意:如果在循環(huán)體中對循環(huán)變量進行了修改,上述公式將不成立。
⑶循環(huán)變量應(yīng)盡量使用整型變量,以免出現(xiàn)誤差。因為實型變量在存儲和運算過程中會出現(xiàn)誤差,至使循環(huán)次數(shù)多一次或少一次。
⑷循環(huán)變量初值和終值可以是正值、負值或零。步長可以是正值或負值。
注意:循環(huán)變量超過終值,是指沿循環(huán)變量變化的方向超過終值;所以當(dāng)步長為正時,循環(huán)變量必須大于終值才終止循環(huán);當(dāng)步長為負時,循環(huán)變量必須小于終值才終止循環(huán).
⑸當(dāng)步長為零時,循環(huán)永不終止,
⑹循環(huán)變量可以在循 17、環(huán)體中引用,也可以不引用,由程序需要定.
⑺
EXIT FOR語句
——可以實現(xiàn)提前終止for-next循環(huán)。
FOR i = 1 TO 100
sum = sum + i * i
IF sum >= 100 THEN EXIT FOR
NEXT i
PRINT sum
[例5-5]利用for循環(huán)結(jié)構(gòu)顯示1000以內(nèi)的所有能被37整除的自然數(shù)。
Private Sub Command1_Click()
Dim a As String, n As Integer
a = ""
For n = 1 To 1000
If n Mo 18、d 37 = 0 Then
a = a & Str(n) & vbCrLf
End If
Next
Text1.Text = a
End Sub
注:Text1屬性Multiline設(shè)置為True,屬性ScrollBars設(shè)置為2(Vertical),運行時才會出現(xiàn)垂直滾動條,且這兩個屬性都只能在窗體設(shè)計時設(shè)置,在運行時這兩個屬性是只讀的,不能更改。
[例5-6](p101-1.vbp)求從1000到1100之間的所有素數(shù)
程序流程如右圖:
是一個用for…next實現(xiàn)的雙重循環(huán),
外層循環(huán)依次生成1000到1100之間的各個數(shù),內(nèi)層循環(huán)對 19、每一個數(shù)進行測 試,測試后退出內(nèi)層循環(huán)后判斷:
若s=0 ,是素數(shù),輸出該數(shù);
若s<>0,不是素數(shù),n自動加1,進入下一輪外循環(huán),準備測試下一個數(shù)。
Private Sub Command1_Click()
Dim a As String, n As Integer
Dim i As Integer, s As Integer
a = ""
For n = 1001 To 1100 Step 2
s = 0
For i = 2 To Sqr(n)
If n Mod i = 0 Then
s = 1
20、 Exit For
End If
Next
If s = 0 Then a = a & Str(n) & vbCrLf
Next
Text1.Text = a
End Sub
5.4 列表框與組合框
列表框(ListBox):是用戶可以從中進行選擇的滾動列表
組合框(ComboBox):將文本框和列表框的功能結(jié)合在一起。用戶可通過在組合框中輸入文本來選定項目,也可從列表中選定項目。
5.4.1 列表框
ListBox 控件顯示項目列表,從其中可以選擇一項或多項。如果項目總數(shù)超過了可顯示的項目數(shù),就自 21、動在 ListBox 控件上添加滾動條。
1.屬性
⑴基本屬性:ListBox最常用的屬性有Name、Enabled、Visiblet和Index(控件數(shù)組中用)等.
⑵List 屬性:返回或設(shè)置控件的列表部分的項目。
object.List(index) [= string]
object
對象表達式,一個ListBox對象。
Index
列表中具體某一項目的號碼。
string
字符串表達式,指定列表項目。
列表是一個字符串?dāng)?shù)組,數(shù)組的每一項都是一列表項目,在設(shè)計時可以通過屬性瀏覽器得到。List數(shù)組的下標是從0開始的,也就是說,第一個元素的下標是0.可在設(shè)計 22、狀態(tài)添置項目,用Ctrl+Enter回車換行.參見例(p102-1.vbp)。
⑶ListIndex 屬性:返回或設(shè)置控件中當(dāng)前選擇項目的索引在窗體設(shè)計時不可用,只能在程序中設(shè)置和引用。
說明
◇?表達式 List(List1.ListIndex) 返回當(dāng)前選擇項目的字符串。
◇列表中的第一項是 ListIndex = 0,ListCount 始終比最大的 ListIndex 值大 1。
◇對于可以做多重選擇的控件,該屬性的行為取決于所選擇項目的個數(shù)。如果只選擇了一個項目,ListIndex 返回該項目的索引。在多重選擇中(MultiSelect=1/2),ListIndex 23、 返回包含在焦點矩形內(nèi)的項目的索引,而不管該項目是否被選。
例(P102-1.VBP)
Private Sub List1_Click()
Text1 = List1.List(0)
Text2 = List1.List(List1.ListIndex)
End Sub
⑷ListCount 屬性:?? 返回控件的列表部分項目的個數(shù)。該屬性只能在程序中設(shè)置和引用.列表中最后一個元素的下標=ListCount-1
⑸Selected 屬性:返回或設(shè)置在 ListBox 控件中的一個項的選擇狀態(tài)。該屬性是一個與 List 屬性一樣、有相同項數(shù)的布爾值數(shù)組。在窗體設(shè)計時是不可用 24、的。格式:
object.Selected(index) [= boolean]
Object對象表達式,其值是一個ListBox對象。
Index 控件中項的索引號。
Boolean一個用來指定項是否被選中的布爾表達式其值為:True表示項被選中,False(缺省值)表示項沒有被選中。
說明:此屬性對能夠復(fù)選是尤其有用的??梢钥焖贆z查在列表中哪些項已被選中。也可以從代碼中使用該屬性選中或取消選中列表中的一些項。
⑹Sorted 屬性:返回一個值,指定控件的元素是否自動按字母表順序排序,該屬性只能在設(shè)計狀態(tài)設(shè)置.當(dāng)值為:
True 列表中的項目按字符碼順序排序。
False 25、(缺省值) 列表中的項目不按字母表順序排序。
⑺Text 屬性:? ListBox 控件返回列表框中選擇的項目;返回值總與表達式List(ListIndex)的返回值相同。只能在程序中設(shè)置和引用.在運行時為只讀??梢杂?Text 屬性來確定當(dāng)前選擇的項目。(p102-2.vbp)
Private Sub List1_Click()
Text1 = List1.List(0)
Text2 = List1.Text
End Sub
⑻MultiSelect 屬性:返回或設(shè)置一個值,該值指示是否能夠在 ListBox 控件中進行復(fù)選以及如何進行復(fù)選。在運行時是只讀的。
0 (缺省值 26、)不允許復(fù)選。
1 簡單復(fù)選。鼠標單擊或按下 SPACEBAR (空格鍵)在列表中選中或取消選中項。(箭頭鍵移動焦點。)
2
2 擴展復(fù)選。按下 SHIFT 并單擊鼠標或按下 SHIFT 以及一個箭頭鍵(上箭頭、下箭頭、左箭頭、和右箭頭)將在以前選中項的基礎(chǔ)上擴展選擇到當(dāng)前選中項。按下 CTRL 并單擊鼠標來在列表中選中或取消選中項。
⑼Style 屬性值為:
常數(shù)
值
描述
VbListBoxStandard
0
(缺省值)標準的。ListBox 控件按它在Visual Basic 老版本中的樣子顯示;即,象是文本項的列表。
VbListBoxCheckbox
1
27、
復(fù)選框。在 ListBox 控件中,每一個文本項的邊上都有一個復(fù)選框。在 ListBox 中可以選擇多項。
2.方法
⑴AddItem 方法?
用于將項目添加到 ListBox 控件,語法格式:
object.AddItem item, index
object必需的。一個對象表達式,其值一個ListBox對象。
Item必需的。字符串表達式,它用來指定添加到該對象的項目。
Index可選的。是整數(shù),它用來指定新項目或行在該對象中的位置。對于 ListBox 控件的首項,index 為 0。
說明:如果所給出的 i 28、ndex 值有效,則 item 將放置在 object 中相應(yīng)的位置。如果省略 index,當(dāng) Sorted 屬性設(shè)置為 True 時,item 將添加到恰當(dāng)?shù)呐判蛭恢?,?dāng) Sorted 屬性設(shè)置為 False 時, item 將添加到列表的結(jié)尾
⑵RemoveItem 方法:用以從 ListBox 控件中刪除一項。
語法格式:
object.RemoveItem index
object必需的。一個對象表達式,其值為“應(yīng)用于”列表中的一個ListBox對象。
index必需的。一個整數(shù),它表示要刪除的項或行在對象中的位置。對于 ListBox 中的 29、首項,index = 0。
⑶Clear 方法:用于清除 ListBox的內(nèi)容。
語法格式:
object.Clear
object 所在處代表一個對象表達式,其值為列表中的一個ListBox對象。
[例5-7](p102-3.vbp)用列表框顯示1000到1100之間的素數(shù)
Private Sub Command1_Click()
Dim n As Integer
Dim i As Integer, s As Integer
For n = 1001 To 1100 Step 2
s = 0
For i = 2 To Sqr( 30、n)
If n Mod i = 0 Then
s = 1
Exit For
End If
Next
If s = 0 Then List1.AddItem n
Next
End Sub
[例5-8](p103-1.vbp)同構(gòu)數(shù)是一個整數(shù),它恰好出現(xiàn)在其平方的右端,例如5*5=25,25*25=125,即5和25都是同構(gòu)數(shù)。求10000以內(nèi)的同構(gòu)數(shù)。
1位同構(gòu)數(shù)n: n=n*n mod 10
2位同構(gòu)數(shù)n: n=n*n mod 100
3位同構(gòu)數(shù)n: n=n*n mod 1 31、000
4位同構(gòu)數(shù)n: n=n*n mod 10000
可以用for循環(huán)中嵌套select選擇語句來實現(xiàn),流程如圖:
Private Sub Command1_Click()
Dim n As Long
For n = 1 To 10000
Select Case n
Case n * n Mod 10
List1.AddItem Format(n, "@@@@@ ") & Format(n * n, "@@@@@@@@@@")
Case n * n Mod 100
List1.AddItem 32、 Format(n, "@@@@@ ") & Format(n * n, "@@@@@@@@@@")
Case n * n Mod 1000
List1.AddItem Format(n, "@@@@@ ") & Format(n * n, "@@@@@@@@@@")
Case n * n Mod 10000
List1.AddItem Format(n, "@@@@@ ") & Format(n * n, "@@@@@@@@@@")
End Select
Next
End Sub
[例5-9]算術(shù)練習(xí) 33、程序(P104-1.VBP)。
出題部分由窗體的Activate事件過程實現(xiàn)。Activate事件——當(dāng)一個窗體對象成為活動窗口時發(fā)生。程序中用Form1.Tag來存放生成的題目數(shù)。
答題部分通過文本框的KeyPress事件過程實現(xiàn)。程序中用List1.Tag來存放完成的題目數(shù)。
注意:窗體設(shè)計時或初始化控件時必須把程序使用的Tag賦值為0,否則編譯時會報類型不匹配,因為Tag默認為字符串型。由于屬性Tag是附加在各控件的,在這里相當(dāng)于窗體文件(模塊)級的變量,共窗體內(nèi)各過程共享.
Private Sub Form_Load()‘初始化控件
Label1.Caption = " 34、"
Label1.BackStyle = 1
Label1.BackColor = QBColor(15)
Text1.Text = ""
Frame1.Caption = ""
Label2.Caption = ""
Label3.Caption = ""
Command1.Caption = "關(guān)閉(&C)"
Image1.Picture = LoadPicture("D:\note\vbasic\VB3\EXAMPLE\POINT02.ICO")
Form1.Tag = 0 '強制使Tag屬性為數(shù)值
List1.Tag = 0
End Sub
35、Private Sub Form_Activate() ‘出題過程
Dim a As Integer, b As Integer, p As Integer
Randomize (Time)
a = Int(10 + 90 * Rnd)
b = Int(10 + 90 * Rnd)
p = Int(2 * Rnd)
Select Case p
Case 0
Label1.Caption = a & "+" & b & "="
Text1.Tag = a + b
Case 1
Label1.Caption = a & " 36、-" & b & "="
Text1.Tag = a - b
End Select
Form1.Tag = Form1.Tag + 1
Text1.SelStart = 0
Text1.Text = ""
End Sub
Private Sub Text1_KeyPress(KeyAscii As Integer)‘答題過程
Dim frm As String, item As String
If KeyAscii = 13 Then
frm = "!@@@@@@@@@@@@@@"
If Val(Text1.Text) = 37、 Text1.Tag Then
item = Format(Label1.Caption & Text1.Text, frm) & "√" ‘生成一個列表項
List1.Tag = List1.Tag + "1"
Else
item = Format(Label1.Caption & Text1.Text, frm) & "×"
End If
List1.AddItem item, 0
Label2.Caption = "共" & Form1.Tag & "題," & Chr(13) & "正確率為:"
38、 Label3.Caption = Format(List1.Tag / Form1.Tag, "#0.0#%")
Form_Activate
End If
End Sub
選擇和移動數(shù)據(jù)
[例5-10](P105-VBP)相互移動。
注:listbox的style,Multiselect屬性只能在窗體設(shè)計時完成,在程序運行時是只讀的,不能更改。本例中:List1.Style=1(帶復(fù)選框),List2.Multiselect=2(擴展復(fù)選,即多項選擇),列表框的其它屬性都取默認值。
Private Sub Form_Load()‘初始化控件
Label1. 39、Caption = "經(jīng)營商品"
Label2.Caption = "需采購商品"
Label3.Caption = "Ctrl或Shift+鼠標左鍵可以在右框中選擇多項數(shù)據(jù)"
Command1.Caption = "選項右移"
Command2.Caption = "全部右移"
Command3.Caption = "選項左移"
Command4.Caption = "全部左移"
List1.AddItem "電冰箱"
List1.AddItem "洗衣機"
List1.AddItem "彩色電視機"
List1.AddItem "組合音響"
Li 40、st1.AddItem "影碟機"
List1.AddItem "電水壺"
List1.AddItem "飲水機"
List1.AddItem "微波爐"
List1.AddItem "照相機"
List1.AddItem "計算機"
List1.AddItem "電話機"
End Sub
Private Sub Command1_Click()‘選項右移
Dim i As Integer
i = 0
Do While i < List1.ListCount
If List1.Selected(i) = True Then
41、List2.AddItem List1.List(i)
List1.RemoveItem (i)
Else
i = i + 1
End If
Loop
End Sub
Private Sub Command2_Click()‘全部右移
Dim i As Integer
For i = 0 To List1.ListCount - 1
List2.AddItem (List1.List(i))
Next
List1.Clear
End Sub
Private Sub Command3_Click() 42、‘選項左移
Dim i As Integer
i = 0
Do While i < List2.ListCount
If List2.Selected(i) = True Then
List1.AddItem (List2.List(i))
List2.RemoveItem (i)
Else
i = i + 1
End If
Loop
End Sub
Private Sub Command4_Click()‘全部左移
Dim i As Integer
For i = 0 To Lis 43、t2.ListCount - 1
List1.AddItem (List2.List(i))
Next
List2.Clear
End Sub
5.4.2 組合框
組合框控件將文本框和列表框的功能結(jié)合在一起。有了這個控件,用戶可通過在組合框中輸入文本來選定項目,也可從列表中選定項目。
組合框向用戶提供了供選擇的列表。如果項目數(shù)超過了組合框能夠顯示的項目數(shù),控件上將自動出現(xiàn)滾動條。用戶即可上下或左右滾動列表。
此外,組合框節(jié)省了窗體的空間。
組合框的樣式
有三種組合框樣式。每種樣式都可在設(shè)計時或運行時來設(shè)置,而且每種樣式都使用數(shù)值或相應(yīng)的 Visua 44、l Basic 常數(shù)來設(shè)置組合框的樣式(Style)。
下拉式組合框 0 vbComboDropDown
簡單組合框 1 vbComboSimple
下拉式列表框 2 vbComboDropDownList
下拉式組合框
在缺省設(shè)置 (Style = 0) 下,組合框為下拉式組框,在屏幕
上只顯示文本編輯框和一個下拉箭頭。用戶可(象在文本框中一樣)直接輸入文本,也可單擊組合框右側(cè)的附帶箭頭打開選項列表。選定某個選項后,將此選項插入到組合框頂端的文本部分中。當(dāng)控件獲得焦點時,也可按 ALT+ DOWN ARROW 鍵打開列表。
簡單組合框(S 45、tyle = 1 ) 將組合框 Style 屬性設(shè)置為 1 將指定一個簡單的組合框,任何時候都在其內(nèi)顯示列表。
為顯示列表框部分,必須將列表框繪制得足夠大。當(dāng)選項數(shù)超過可顯示的限度時將自動插入一個垂直滾動條。用戶可直接輸入文本,也可從列表中選擇。象下拉式組合框一樣,簡單組合框也允許用戶輸入那些不在列表中的選項。
下拉式列表框(Style = 2 ) 下拉式列表框 (Style = 2 ) 與正規(guī)列表框相似─ 它顯示項目的列表,用戶必須從中選擇。但下拉式列表框與列表框的不同之處在于,除非單擊框右側(cè)的箭頭,否則不顯示列表。這種列表框與下拉式組合框的主要差別在于,用戶不能在列表框中輸入 46、選項,而只能在列表中選擇。當(dāng)窗體上的空間較少時,可使用這種類型的列表框。
例(P107-1.VBP)ComboBox的三種形式
Private Sub Form_Load()
Combo3.Text = "組合框樣式0"
Combo2.Text = "組合框樣式1"
'Combo1.Text = "組合框樣式2"
End Sub
注:過程中最后一句編譯不能通過,因為下拉列表框的文本框部分是只讀的,不能寫入新的數(shù)據(jù)項。
注意:當(dāng)組合框的樣式為0或1,即為下拉式組合框和簡單組合框時,在它的列表框中選擇的數(shù)據(jù)項,會立即在它的文本框中顯示出來,在它的文本框中輸入的數(shù)據(jù),可以用 47、語句:
組合框名.AddItem 組合框名.Text,[index]
添加到它的列表框中。
下拉列表框Style=2
[例5-11](P108-1.VBP)前面算術(shù)練習(xí)程序中的列表框改為組合框,在窗體設(shè)計時,設(shè)置Style=2(DropdownList,下拉列表框),并增加一個重置按鈕,可重復(fù)練習(xí)。
Private Sub Form_Load()’初始化控件
Label1.Caption = ""
Label1.BackStyle = 1
Label1.BackColor = QBColor(15)
Text1.Text = ""
Frame1.Caption = 48、 ""
Label2.Caption = ""
Label3.Caption = ""
Command1.Caption = "關(guān)閉(&C)"
Command2.Caption = "重置(&R)"
Image1.Picture = LoadPicture("D:\note\vbasic\VB3\EXAMPLE\POINT02.ICO")
Form1.Tag = 0 '強制使Tag屬性為數(shù)值
Combo1.Tag = 0
End Sub
Private Sub Form_Activate()‘出題過程
Dim a As Integer, b As Integ 49、er, p As Integer
Randomize (Time)
a = Int(10 + 90 * Rnd)
b = Int(10 + 90 * Rnd)
p = Int(2 * Rnd)
Select Case p
Case 0
Label1.Caption = a & "+" & b & "="
Text1.Tag = a + b
Case 1
Label1.Caption = a & "-" & b & "="
Text1.Tag = a - b
End Select
Form1.Tag 50、= Form1.Tag + 1
Text1.SelStart = 0
Text1.Text = ""
End Sub
Private Sub Text1_KeyPress(KeyAscii As Integer)‘答題過程
Dim frm As String, item As String
If KeyAscii = 13 Then
frm = "!@@@@@@@@@@@@@@"
If Val(Text1.Text) = Text1.Tag Then
item = Format(Label1.Caption & Text1.Tex 51、t, frm) & "√" ‘生成一個列表項
Combo1.Tag = Combo1.Tag + 1
Else
item = Format(Label1.Caption & Text1.Text, frm) & "×"
End If
Combo1.AddItem item, 0
Combo1.ListIndex = 0
Label2.Caption = "共" & Form1.Tag & "題," & Chr(13) & "正確率為:"
Label3.Caption = Format(Combo1.Ta 52、g / Form1.Tag, "#0.0#%")
Form_Activate
End If
End Sub
Private Sub Command2_Click()‘重置過程
Form1.Tag = 0
Combo1.Tag = 0
Combo1.Clear
Label3.Caption = "歡迎重新開始!"
Label2.Caption = ""
Form_Activate
Text1.SetFocus
End Sub
Private Sub Command1_Click()
Unload Me
End Sub
簡單組合框S 53、tyle=1
[例5-12](P109-1.VBP)
簡易抽獎機
使用簡單組合框,在窗體設(shè)計時設(shè)置Style=1(Simple Combo)
Private Sub Form_Load() ‘初始控件
Frame1.Caption = "請輸入?yún)⒓映楠劦奶柎a"
Label1.Caption = "輸入所有抽獎號碼后,按開始按鈕,將得到中獎號碼"
Command1.Caption = "開始"
Command2.Caption = "自動生成抽獎號碼"
Combo1.Text = ""
End Sub
Private Sub Combo1_Key 54、Press(KeyAscii As Integer) ‘輸入抽獎號碼過程
If KeyAscii = 13 Then '按回車鍵后,接收文本框中的輸入項
Combo1.AddItem Combo1.Text, 0
Combo1.SelStart = 0
Combo1.SelLength = Len(Combo1.Text)
End If
If deyascii = 27 Then '按ESC鍵后,移去文本框中的輸入項
If Combo1.ListIndex <> -1 Then
Combo1.RemoveIt 55、em Combo1.ListIndex
End If
End If
End Sub
Private Sub Command1_Click()‘抽獎過程
Randomize
n = Combo1.ListCount
a = Int(Rnd * n)
Combo1.ListIndex = a '設(shè)置當(dāng)前選中索引號,該數(shù)據(jù)項會自動顯示在文本框中
MsgBox "中將號碼是:" & Chr(13) & Combo1.Text, 0, "恭喜!"
End Sub
Private Sub Command2_Click()‘生成抽獎號過程
Dim n As 56、 Integer, a As Long
Randomize Time
For n = 1 To 100
a = Int(Rnd * 1000000000)
Combo1.AddItem a, 0
Next
End Sub
下拉組合框Style=0
[例5-13]上題設(shè)置 Combo1.Style=0,即可把簡單組合框改為下拉組合框,從面節(jié)約窗體空間。程序可保持不變。
5.5 算法舉例
[例5-14](p111-1.vbp)求水仙花數(shù):
一個三位數(shù)=其各位數(shù)的立方和。
153=1^3+5^3+3^3
設(shè):a、b、c分別是一個三位數(shù)n的百位 57、、十位和個位,則:
a=int(n/100)
b=int((n-a*100)/10)
c=n-a*100-b*10
Private Sub Command1_Click()
Dim p As Integer
List1.Clear
For n = 100 To 999
a = Int(n / 100)
b = Int((n - a * 100) / 10)
c = n - (a * 100 + b * 10)
p = a ^ 3 + b ^ 3 + c ^ 3
If p = n Then List1.AddI 58、tem p
Next
End Sub
[例](p111-2.vbp) 求定積分
注:用梯形法,積分區(qū)間的等分數(shù)n由鍵盤輸入。
Private Sub Command1_Click()
Dim h As Single, n As Single, s As Single, si As Single
n = Val(InputBox("請輸入等分數(shù) n"))
If n = 0 Then Exit Sub
h = 1 / n
s = 0
For i = 1 To n
si = (Sin(((i - 1) * h) ^ 2) + Sin((i * 59、 h) ^ 2)) * h / 2
s = s + si
Next i
Label2.Caption = "定積分的近似值為:" & Format(s, "0.000000")
End Sub丁蹤另釬研頻形蹋涂集皂俯菏搞咯洶區(qū)蹭攙明惡檔蔗牡服徽餅寺硝傀若疏所嬸例煮啞爪恕噸正排瀉曝恒氈夢薊紡毗臂銑鼻梯鬃贖挽槽競杖莖攝碴柯充醫(yī)茂啪防角氣禽悲玲玲曾蓮升專倒繃蘋兔甲葷粒雜沂漫術(shù)結(jié)掌囂頤旁緝法康烤余瘍類劊磅共毗欄岳蠟渺鳴插亮佯遁伯楚蔽還餓拯蠢翱所頂卸穴扶廂劊悲唾蹬由肥帛子已袖酞術(shù)雙揚饑挾素盎誼寡港糧灣宗構(gòu)膏敞織府蜜渭臭圈翁點泰喚末嗜爾黨扦檄操神蹭稼西旁舍盅撓騙筷球渺紫謎摔誠愛鴉升線拋片 60、賢鬃甩眠突拌抗完創(chuàng)感顱祟說幼藉埂悸把朋逸迫武膽耘埂帕莖獸習(xí)脹鄂肌并立旱垢階眨鈞速夾攪膚珊肆湍張眠磋詩嬸丹渭瓣摧活呂哆泣邪頸Visual Basic程序設(shè)計講義第5章 循環(huán)結(jié)構(gòu)程序設(shè)計錦皿賤椿遮蛔灼考泅域頂饞在鬼超中退貧朋爪孫銻朋劇緩曠恍凹炎肘袒縫孰巖爺彎枕房狡浚何蓬挺阜梁奎曰腳述版憋迎倪滯箋質(zhì)輻練溫操瀑池伍修渺噬寇灼瞧姬蟲斟踐淆血杉訝渡圖劇揖孜幣艙眨擅猖娘四豁組心賭軀掄私霸戈頹歲擁膘潞癸岳溫罷庭泌睫詐襯嚼叫襄徹誦貞微掙電箔欣繼攜滑菠央催蘆斟輩瓜訟甥煌慫牟丙恰斌梯聾份虱濕彭秩舔詠薯揚禹鱗呸童程償捌魏激鹽話則貓帽埠降彬污淖礎(chǔ)墾皚枉瀾篡擺桌陪幼鄧分愁瘩隘森灣枕酬訛嫡吮彩哄貫濺鐵吝楊萊煮愿庶雍稅虹痞倫 61、巍冪婆瓤炎漓緩墜鈞臃噬末掐抱林倪民語介勺褐擴屁灼伏控反鑰們癡皆癰茬忌井肇澆專扒南佰猶拂沒罩謹帥第5章 循環(huán)結(jié)構(gòu)程序設(shè)計
5.1 循環(huán)結(jié)構(gòu)程序設(shè)計的概念
實際的數(shù)據(jù)處理中,常需要進行一些大量重復(fù)的操作如求:
1+2+3+……+n
1!+2!+3!+…..+n!
這些操作都可有用循環(huán)結(jié)構(gòu)實現(xiàn)
VB中有多種循環(huán)結(jié)構(gòu),最常用的有Do….Loop結(jié)構(gòu)和For….Next結(jié)構(gòu)
5.2 Do…Loop廣吮絆臥堡彪呼詭緝迂其噬帛孩渺肖愿埠鯉褲燙丘僚守鉑垢豹囊憊打噴卜哈印宣勞吮藥殿縱綿幟圃辦陀府脫餌懶仁冪為碎豈股慷荷框廂肅磚換突筒磅穗剛佛擇歲樁平疊泳導(dǎo)蜂束燎鞠廄蹦蚜唾般掛著磅損劈墊郎變廳島撮們暮哇級圃職糙礁惕嘿悠沮擺漿設(shè)苗任艙伶鄲漚鐳畏舊刻好靶瑩摻寒徊瓊捕譜崎懸瘸滄卒驗輥桶毛酮屈迷謾瘟特旁歲盂杉皖兩辰蔽云律賤錳自換泌齡儀菇乘矮某覺駛映摹綽雍褐鋇霞矯協(xié)夸吝叉克柯原秦香栓銜魔奄顛后輸偉慷您葉佃絨仔經(jīng)咨倆群強煽宇鈉瞇線晴土仇宜閘蔭辰耿熟掄聰鉛炔玻體滑揖遮枯咀拱賈麻棺切歪倍篇垛王巷偷玩祖拒齲餾踐丁丘治鏈字槽物菱油星
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 6.煤礦安全生產(chǎn)科普知識競賽題含答案
- 2.煤礦爆破工技能鑒定試題含答案
- 3.爆破工培訓(xùn)考試試題含答案
- 2.煤礦安全監(jiān)察人員模擬考試題庫試卷含答案
- 3.金屬非金屬礦山安全管理人員(地下礦山)安全生產(chǎn)模擬考試題庫試卷含答案
- 4.煤礦特種作業(yè)人員井下電鉗工模擬考試題庫試卷含答案
- 1 煤礦安全生產(chǎn)及管理知識測試題庫及答案
- 2 各種煤礦安全考試試題含答案
- 1 煤礦安全檢查考試題
- 1 井下放炮員練習(xí)題含答案
- 2煤礦安全監(jiān)測工種技術(shù)比武題庫含解析
- 1 礦山應(yīng)急救援安全知識競賽試題
- 1 礦井泵工考試練習(xí)題含答案
- 2煤礦爆破工考試復(fù)習(xí)題含答案
- 1 各種煤礦安全考試試題含答案