看板 Visual_Basic 關於我們 聯絡資訊
既然是在講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