要弄清楚这两个问题,就要明白For循环语句的语法规则:
创新互联凭借专业的设计团队扎实的技术支持、优质高效的服务意识和丰厚的资源优势,提供专业的网站策划、网站设计制作、网站设计、网站优化、软件开发、网站改版等服务,在成都十余年的网站建设设计经验,为成都上1000家中小型企业策划设计了网站。
For循环语句,首先是判断循环条件,如果循环条件不合理,则循环不执行。
那么看第一个语句,循环范围是 i = -3.5 to 5.5,显然这个是一个从-3.5到5.5的递增范围,可是后面的Step却是一个负数,表示以0.5的步长递减。取值范围要求从小到大,可是步长改变却是由大变小,显然这个循环条件自相矛盾,所以循环将不会执行,也就是循环执行的次数是0次!
如果循环条件合理,则开始执行循环语句,直到根据步长变换,下一个值超出循环范围则终止。
For j = 6 to 2 Step -2
Next
完整写法就是:
For j = 6 to 2 Step -2
Next j
Next j的意思就是下一个j值。结合本题,下一个j值等于6-2=4,这个时候,就是循环语句的第二个规则,判断循环变量的值是否超出循环范围,我们这里的j=4,显然是在6 to 2这个范围之内,所以循环继续,到下一个j的时候为2,依然在循环范围内;到这里,6,4,2我们的循环执行了3次,准备第4次循环的时候j = 2 -2 = 0超过了6 to 2这个范围,那么循环终止。
所以i循环内的每一个j循环将执行3次。
dim i
for i=2 to 1
msgbox("*")
next
语法没问题,这应该在winform里面能够调试成功,显示运行框,但是在web application里面就不能出现弹出信息框了,在网页上要出现,建议用response.write("scriptalert('***')/script").
for i=100 to 1 这样的语句在VB9.0后是支持的。楼下的,不要天天抱着VB6啃。
首先写一个事件响应方法:
Protected Sub dcwgl_zx_f5_TextChanged(ByVal sender As Object, ByVal e As EventArgs)
'一些代码
'如果你想使用这个响应事件的控件,用CType(sender,TextBox)表达
'例如Dim thisTextBox As TextBox = CType(sender, TextBox)
End Sub
用如下代码就可以绑定事件了:
AddHandler xxTextBox.TextChanged, AddressOf dcwgl_zx_f5_TextChanged
推荐你动态创建这些控件并绑定事件(通常在Form的Load事件中)。假设你要创建x个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
你也可以静态添加这些TextBox,当然事先要把它们放入某个容器中,比如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
你确信只循环一次吗?我看不像,在最后添加上一句msgbox jishu1,多半显示3。
是在第二块代码中有问题,你应该把chaxun4 = xlsheet.Range("l1").Value + 2分别放到两个条件句中初始chaxun4变量。
因为上一个Do Until atmbianhaop = xlsheet.Range("B" chaxun4).Value 循环退出后,下一个循环一开始就符合退出条件了,所以循环没有进行了。
这是你的For语句
For i = 0 To webtable.Rows.Count - 1
Label2.Text = "正在从远程服务器下载数据 " i "/" webtable.Rows.Count
CMD = New OleDbCommand(Dbcstr, Dbc)
CMD.ExecuteNonQuery()
webrow = webtable.Rows.Item(i)
Next
语句中Dbcstr一直没有变动过,所以你提交到数据库中的内容总是第一行。
修改如下,未调试。
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()
值传递和地址传递(引用)的而导致的问题。
在For Each 的时候
当对象是值对象的时候,等于获得到一个副本。
当对象是引用对象的时候,则是获得到一个指针。
而在For To 的时候
无论对象是什么,你都获得到这个集合指定位置的指针。
更详细的,可以请参考以下内容,或直接去官方的MSDN了解
关于值类型和引用类型:
如果数据类型在它自己的内存分配中存储数据,则该数据类型就是“值类型”。“引用类型”包含指向存储数据的其他内存位置的指针。
值类型
值类型包括:
所有数字数据类型
Boolean、Char 和 Date
所有结构,即使其成员是引用类型
枚举,因为其基础类型总是 SByte、Short、Integer、Long、Byte、UShort、UInteger
或 ULong
引用类型
引用类型包括:
String
所有数组,即使其元素是值类型
类类型,如 Form
委托
非类型的元素
以下编程元素未限定为类型,因为您无法将它们中的任何一个指定为声明元素的数据类型:
命名空间
模块
事件
属性和过程
变量、常数和字段
使用对象数据类型
可以将引用类型或值类型指派给 Object 数据类型的变量。Object
变量总是存储指向数据的指针,从不存储数据本身。然而,如果将值类型指派给 Object 变量,则 Object
变量将表现得像存储自己的数据一样。有关更多信息,请参见 Object 数据类型。
通过将 Object 变量传递给 Microsoft.VisualBasic
命名空间中 Information
类的 IsReference
方法,可以确定该变量是用作引用类型还是值类型。如果 Object 变量的内容表示引用类型,则 Information.IsReference 返回 True。