Re: [.NET] 消失的控制項陣列?

看板Visual_Basic作者 (還在想)時間14年前 (2009/08/22 11:49), 編輯推噓1(105)
留言6則, 4人參與, 最新討論串2/2 (看更多)
※ 引述《NTUHacker (呼~)》之銘言: : 最近開始從VB6轉到NET : 結果google後發現控制項陣列的功能已經消失 : 請問目前是否有解決方案呢? : 還是只能用for each in controls慢慢找? : 目前是否無有效方法解決呢? : 非常感謝您的回覆與指教 m(_ _)m 宣告方法不同罷了 要用控制項陣列 需要從語法來宣告 我知道的做法有2 1.從頭開始宣告 範例(vb的): Public Class Form1 Private TextBoxArray(9) As TextBox Private Sub Form1_load(...) Dim posY As Integer = 0 For count As Integer = 0 To 9 TextBoxArray(count) = New TextBox() TextBoxArray(count).Location = New Point(5,posY) posY = posY + 15 TextBoxArray(count).Text = count + 1 Me.Controls.Add(TextBox(count)) Next End Sub End Class 這樣子就可以製造出10個從上往下對齊的TextBox陣列 要存取時就使用TextBoxArray(i)來存取第i個就可以了 這做法的缺點是各個控制項的位置只有在執行期間看的到 要調整位置得要自己思考各個控制項的大小、每次應增加的位置偏移量之類 其他屬性皆同,對外觀有特別要求時可能不好調整(見人見智) 優點就是不用一個一個慢慢拉 對於要自動生成的需求可以省去許多一個一個設定的功夫 2.將已存在的控制項製成陣列 假設妳已經在Form1上拉了三個TextBox,名稱都是預設的 TextBox1 TextBox2 TextBox3 像這樣 接著就是寫程式碼的部分 以下同樣是寫在Form1的Class內 Public Class Form1 Private TextBoxArray(2) As TextBox Private Sub Form1_Load(...) TextBoxArray(0) = TextBox1 TextBoxArray(1) = TextBox2 TextBoxArray(2) = TextBox3 End Sub End Class 程式碼就這樣,這樣就可以透過TextBoxArray(i)來存取第i個TextBox控制項了 這樣做得優點是可以用VB習慣的方式來設定各別控制項的屬性,而且效果馬上看得到 不會像從頭宣告那樣只有執行期看得到 缺點就是製作陣列時無法使用迴圈(或許只是我孤陋寡聞不會寫) 得要像 TextBoxArray(0) = TextBox1 這行程式這樣一個一個手動的來設定 如果控制項一多會很麻煩,也容易寫錯(不過VB有程式碼即時偵錯,其實也還好) 但其實這只要做一次就好,之後可以用陣列存取 所以妳不介意的話,這樣寫也好 主要適用於控制項數量不會有更改時 當然妳也可以混著寫 比如說同樣宣告TextBoxArray時,宣告(9)個 但前3個使用方法2來宣告 後7個則使用方法1 這樣也是一種彈性 大概就是這樣吧 有錯請告訴我 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.168.238.76 ※ 編輯: Peruheru 來自: 118.168.238.76 (08/22 11:51)

08/22 14:22, , 1F
不推薦自己寫程式碼實作陣列 因為這是在拖延開發進度
08/22 14:22, 1F

08/22 17:34, , 2F
我只是不曉得其他作法而已XD
08/22 17:34, 2F

08/22 22:33, , 3F
VB6同樣可以用Me.Controls("名稱")找控制項
08/22 22:33, 3F

08/22 22:34, , 4F
不過當然還是VB6的控制項陣列方便XD
08/22 22:34, 4F

08/23 18:18, , 5F
感謝Peruheru和板主大人回覆,受用無窮,問題已解^_^
08/23 18:18, 5F

08/24 10:55, , 6F
還可以使用控制項陣列物件阿~~~
08/24 10:55, 6F
文章代碼(AID): #1AZsh0pv (Visual_Basic)
文章代碼(AID): #1AZsh0pv (Visual_Basic)