作者cole945 (躂躂..)
看板Visual_Basic
標題Re: [.NET] 可以使用迴圈控制物件嗎?
時間Fri Jun 22 23:17:11 2007
既然是在講2005..所以我就把標題換成 .NET 了~
※ 引述《finch319 (Finch)》之銘言:
: 我有一個很類似的問題
: 只是我的環境是Visual Basic 2005的
: 我的程式是有9x9共81個Button
: 名稱是Button00、Button01...Button88
: : vb6本來就可以把控制項開成陣列~
: : 你只要把 Name 設成一樣, 他就會問你要不要建立陣列~
: : 然後你就可以用 For 來跑這些 Lables
: : (vb6會自己幫你設Index,你也可以在屬性修改)
: : ' 用起來會像這樣, 這是一個 Label1 的陣列
: : For i = 0 To Label1.Count - 1
: : Label1(i).Caption = 1
: : Next i
要達到這個目的方法有很多..
看你自己適合用哪一個..
比較簡單(但比較沒效率的法)
Me.Controls("Button00")
這樣就可以把 Button00 取出來了. 老話一句, 注意取出來的東西是 Control,
如果你只要操作他 Control 部份的特性 (像Text,Height,Top等等)
那就不用轉型了, 如果是要操作Button特有的方法屬性等等, 那要用CType轉型
(依情況你還會需要判斷是不是 Nothing, 因為Button??可能不存在)
這個方法衍生出來的另一個問題是, 怎麼用for-loop造出
"Botton00" 這個字串, 因為 "Button" & 0 是變成 "Button0"
這個可以用 String.Format("Button{0:00}", i) 來讓i不足兩位時補0
: 請問上面這個功能在2005有辦法用嗎
: 我把Button的名字設成一樣
: 會出現"無效的屬性值。"對話框
到從2002開始就不能直接從Designer把控制項設成同名來自動建立成陣列了..
比較容易的作法就是上面講的方法, 如果你熟悉 Array或List的話,
我會建議你用自己手動動態產生Button陣列自己手動放到 Form 上面
如果你的 Button的個數是靜態的(不會或不常新增移除)
那建議你用 Array, 反之建議用 List
先宣告一個類別成員
Dim Buttons(81-1) as Buttons ' 用這個arrary存放你的buttons
' 在Form_Load或你想要的地方初始這81個 button
' 這段程式會在form上整齊放上81個button
for i = 0 to Buttons.Length - 1
Buttons(i) = new Button()
With Buttons(i)
.Height = 20 ' 高
.Width = 20 ' 寬
.Top = (i mod 9) * 20 ' 上y
.Left = (i \ 9) * 0 ' 左x
.Text = i
End With
Me.Controls(Buttons(i)) ' 把這個Button放到你的 Form 上
Nexi
之後你要處理這81個button時, 就用像上面loop的方式處理他們
如果你要用List的方式作, 請自行參考如果使用 ArrayList
如果都覺得太麻煩, 也可以直接把 Form 上的 Controls全部弄出來,
再自行判斷是不是你要的Button
看你要用
for i = 0 to Controls.Length-1
'Controls(i) ????
Next
還是
foreach c as Control in Controls
' c??
Next
然後你可以用 typeof c is Button 來判斷c這個control是不是button
或用 c.Name 是不是 Button?? 再把他CType成Button去處理
: 我是希望能夠透過陣列來更改這些Button的Image屬性
: 不知道有沒有辦法做到?
: 謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.138.216.17
推 finch319:感謝您的說明,我會再試試看的 06/22 23:41
推 fumizuki:foreach 應該是 For Each 有空格才對? 06/24 10:16