iT邦幫忙

0

VB For迴圈+變數名稱寫法問題(我是初學者)

小弟最近自學VB...
由於以前只學過Tcl而都沒學過VB,所以有些問題在各位前輩眼中是小問題,
但是在我身上卻是我的大問題啊!!!
請有經驗的大大們指點迷津吧!!!

我遇到的問題是...
例如:現有3個button,Name分別為but1,but2,but3,而Enable皆為Fales
若我需要用For迴圈將3個button的Enable改為True,該如何寫??

我只知道TCL寫法...
for {set i 1} {$i < 4} {incr i} {
but$i.Enable=True
}

但是我卻一直摸不會VB的寫法...請各位先進教一下吧!!!感激不盡︿︿

kenny2061 iT邦新手 3 級 ‧ 2010-11-24 01:05:51 檢舉
如果你的Button是1、2、3、4、5…這樣的數字遞增,用下列的迴圈方式就不會產生"But1"和"But10"的問題,因為用的不是StartWith函數。

'假設有30個Button,但是一般來說應該不會這麼多吧?
For i As Integet=1 to 30
If Me.FindControl("but" & i) Is Not Nothing Then
CType(Me.FindControl("but" & i),Button).Enabled=True
End If
Next

上述的是.Net的寫法,若是VB6的話就會是另外一種的寫法了。
ycl8000 iT邦高手 1 級 ‧ 2010-11-24 08:19:26 檢舉
若VB6的話,可直接用控制項陣列處理.

2 個回答

12
lordrd
iT邦新手 2 級 ‧ 2010-11-22 12:59:37
最佳解答

試試

For Each cobj In Form.Controls
if cobj.Name = "but1" then cobj.Enable = true
Next

非常感謝你的回覆!!
我有用你的解答改了之後去試看看!!
但是有點錯誤~不知道哪裡有錯??
能替我看一下嗎??

Dim i As Integer = 0
Dim j As String
For i = 1 To 3
j = "but" & i
For Each CObj In Me.Controls
If i < 3 Then
CObj(.Name = j)
CObj(.Enable = True)
End If
Next
Next

錯誤發生在For Each CObj In Me.Controls這行
[In 必須又'(']<----這是什麼意思??

lordrd iT邦新手 2 級 ‧ 2010-11-22 14:39:48 檢舉

拍謝 因為直接回答 沒注意 cobj 是保留字

For Each butt As Control In Me.Controls
If butt.Name.StartsWith ( "But" ) then
butt.Enabled = true
end if
Next

OK了耶!!
只不過是採用比對name的方式...會有點麻煩
例如:but1..but2..此類字串容易和but10~but19...but20~but29比對到!!
不過將物件名稱改成"數字自動補零"後就可以解決問題了!!
感謝你的解答!!!

10
ycl8000
iT邦高手 1 級 ‧ 2010-11-22 12:24:51

上網查一下就一堆範例, 以你的程度算小case.
http://msdn.microsoft.com/zh-tw/library/5z06z1kb(VS.80).aspx

感謝你的回覆!!!
我明白你提到的for迴圈寫法...我有搜尋到很多!!
不過我所卡住的地方是...
but1,but2,but3<---but後面的數字隨著for迴圈的i做變化遞增
換個角度說...
我遞增出來的東西不是要單一字串和數字,而是變數名稱!!
不曉得您明白我的解釋嗎??

若您明白後而也有解決之道...能否告訴我???
我卡住好久了....冏rz....謝謝!!

我要發表回答

立即登入回答