要弄清楚這兩個(gè)問題,就要明白For循環(huán)語句的語法規(guī)則:
創(chuàng)新互聯(lián)憑借專業(yè)的設(shè)計(jì)團(tuán)隊(duì)扎實(shí)的技術(shù)支持、優(yōu)質(zhì)高效的服務(wù)意識和豐厚的資源優(yōu)勢,提供專業(yè)的網(wǎng)站策劃、網(wǎng)站設(shè)計(jì)制作、網(wǎng)站設(shè)計(jì)、網(wǎng)站優(yōu)化、軟件開發(fā)、網(wǎng)站改版等服務(wù),在成都十余年的網(wǎng)站建設(shè)設(shè)計(jì)經(jīng)驗(yàn),為成都上1000家中小型企業(yè)策劃設(shè)計(jì)了網(wǎng)站。
For循環(huán)語句,首先是判斷循環(huán)條件,如果循環(huán)條件不合理,則循環(huán)不執(zhí)行。
那么看第一個(gè)語句,循環(huán)范圍是 i = -3.5 to 5.5,顯然這個(gè)是一個(gè)從-3.5到5.5的遞增范圍,可是后面的Step卻是一個(gè)負(fù)數(shù),表示以0.5的步長遞減。取值范圍要求從小到大,可是步長改變卻是由大變小,顯然這個(gè)循環(huán)條件自相矛盾,所以循環(huán)將不會執(zhí)行,也就是循環(huán)執(zhí)行的次數(shù)是0次!
如果循環(huán)條件合理,則開始執(zhí)行循環(huán)語句,直到根據(jù)步長變換,下一個(gè)值超出循環(huán)范圍則終止。
For j = 6 to 2 Step -2
Next
完整寫法就是:
For j = 6 to 2 Step -2
Next j
Next j的意思就是下一個(gè)j值。結(jié)合本題,下一個(gè)j值等于6-2=4,這個(gè)時(shí)候,就是循環(huán)語句的第二個(gè)規(guī)則,判斷循環(huán)變量的值是否超出循環(huán)范圍,我們這里的j=4,顯然是在6 to 2這個(gè)范圍之內(nèi),所以循環(huán)繼續(xù),到下一個(gè)j的時(shí)候?yàn)?,依然在循環(huán)范圍內(nèi);到這里,6,4,2我們的循環(huán)執(zhí)行了3次,準(zhǔn)備第4次循環(huán)的時(shí)候j = 2 -2 = 0超過了6 to 2這個(gè)范圍,那么循環(huán)終止。
所以i循環(huán)內(nèi)的每一個(gè)j循環(huán)將執(zhí)行3次。
dim i
for i=2 to 1
msgbox("*")
next
語法沒問題,這應(yīng)該在winform里面能夠調(diào)試成功,顯示運(yùn)行框,但是在web application里面就不能出現(xiàn)彈出信息框了,在網(wǎng)頁上要出現(xiàn),建議用response.write("scriptalert('***')/script").
for i=100 to 1 這樣的語句在VB9.0后是支持的。樓下的,不要天天抱著VB6啃。
首先寫一個(gè)事件響應(yīng)方法:
Protected Sub dcwgl_zx_f5_TextChanged(ByVal sender As Object, ByVal e As EventArgs)
'一些代碼
'如果你想使用這個(gè)響應(yīng)事件的控件,用CType(sender,TextBox)表達(dá)
'例如Dim thisTextBox As TextBox = CType(sender, TextBox)
End Sub
用如下代碼就可以綁定事件了:
AddHandler xxTextBox.TextChanged, AddressOf dcwgl_zx_f5_TextChanged
推薦你動態(tài)創(chuàng)建這些控件并綁定事件(通常在Form的Load事件中)。假設(shè)你要創(chuàng)建x個(gè)TextBox:
For i = 0 To x
Dim tb As New TextBox()
'把它加入父容器的控件集合
Form1.Controls.Add(tb)
'綁定事件
AddHandler tb.TextChanged, AddressOf dcwgl_zx_f5_TextChanged
Next i
你也可以靜態(tài)添加這些TextBox,當(dāng)然事先要把它們放入某個(gè)容器中,比如GroupBox1,再綁定事件(在Load事件中):
For Each con As Control In GroupBox1.Controls
If TypeOf con Is TextBox Then
Dim tb As TextBox = CType(con,TextBox)
AddHandler tb.TextChanged, AddressOf dcwgl_zx_f5_TextChanged
End If
Next
你確信只循環(huán)一次嗎?我看不像,在最后添加上一句msgbox jishu1,多半顯示3。
是在第二塊代碼中有問題,你應(yīng)該把chaxun4 = xlsheet.Range("l1").Value + 2分別放到兩個(gè)條件句中初始chaxun4變量。
因?yàn)樯弦粋€(gè)Do Until atmbianhaop = xlsheet.Range("B" chaxun4).Value 循環(huán)退出后,下一個(gè)循環(huán)一開始就符合退出條件了,所以循環(huán)沒有進(jìn)行了。
這是你的For語句
For?i?=?0?To?webtable.Rows.Count?-?1
Label2.Text?=?"正在從遠(yuǎn)程服務(wù)器下載數(shù)據(jù)?"??i??"/"??webtable.Rows.Count
CMD?=?New?OleDbCommand(Dbcstr,?Dbc)
CMD.ExecuteNonQuery()
webrow?=?webtable.Rows.Item(i)
Next
語句中Dbcstr一直沒有變動過,所以你提交到數(shù)據(jù)庫中的內(nèi)容總是第一行。
修改如下,未調(diào)試。
Dbc.Open()
For?i?=?0?To?webtable.Rows.Count?-?1
Dim?Dbcstr?As?String?=?"INSERT?INTO?PurchaseOrders?([PurchaseOrderID],……
Dbcstr?=?Dbcstr??"?VALUES('"??webtable.rows(i).Item(0)??"','"?……
'webrow.Item(0)改成webtable.rows(i).Item(0),其他一樣
CMD?=?New?OleDbCommand(Dbcstr,?Dbc)
CMD.ExecuteNonQuery()
Next
conn.Close()
Dbc.Close()
值傳遞和地址傳遞(引用)的而導(dǎo)致的問題。
在For Each 的時(shí)候
當(dāng)對象是值對象的時(shí)候,等于獲得到一個(gè)副本。
當(dāng)對象是引用對象的時(shí)候,則是獲得到一個(gè)指針。
而在For To 的時(shí)候
無論對象是什么,你都獲得到這個(gè)集合指定位置的指針。
更詳細(xì)的,可以請參考以下內(nèi)容,或直接去官方的MSDN了解
關(guān)于值類型和引用類型:
如果數(shù)據(jù)類型在它自己的內(nèi)存分配中存儲數(shù)據(jù),則該數(shù)據(jù)類型就是“值類型”。“引用類型”包含指向存儲數(shù)據(jù)的其他內(nèi)存位置的指針。
值類型
值類型包括:
所有數(shù)字?jǐn)?shù)據(jù)類型
Boolean、Char 和 Date
所有結(jié)構(gòu),即使其成員是引用類型
枚舉,因?yàn)槠浠A(chǔ)類型總是 SByte、Short、Integer、Long、Byte、UShort、UInteger
或 ULong
引用類型
引用類型包括:
String
所有數(shù)組,即使其元素是值類型
類類型,如 Form
委托
非類型的元素
以下編程元素未限定為類型,因?yàn)槟鸁o法將它們中的任何一個(gè)指定為聲明元素的數(shù)據(jù)類型:
命名空間
模塊
事件
屬性和過程
變量、常數(shù)和字段
使用對象數(shù)據(jù)類型
可以將引用類型或值類型指派給 Object 數(shù)據(jù)類型的變量。Object
變量總是存儲指向數(shù)據(jù)的指針,從不存儲數(shù)據(jù)本身。然而,如果將值類型指派給 Object 變量,則 Object
變量將表現(xiàn)得像存儲自己的數(shù)據(jù)一樣。有關(guān)更多信息,請參見 Object 數(shù)據(jù)類型。
通過將 Object 變量傳遞給 Microsoft.VisualBasic
命名空間中 Information
類的 IsReference
方法,可以確定該變量是用作引用類型還是值類型。如果 Object 變量的內(nèi)容表示引用類型,則 Information.IsReference 返回 True。