close
標題:

VB 2005 可不可以建立按鈕陣列呢?

發問:

在VB6時,建立Command1的按鈕之後copy這個按鈕再貼上VB便會問你要不要建立Command1的矩陣選yes之後所有貼上的按鈕都以陣列命名Command1(0),Command1(1),Command1(2),Command1(3),.....然後我只要寫一個副程式Private Sub Command1(Index as Integer)'程式內容End Sub就可以代表所有按鈕所要執行的內容問題來了VB2005並不能像VB6一樣用Copy and... 顯示更多 在VB6時,建立Command1的按鈕之後 copy這個按鈕再貼上 VB便會問你要不要建立Command1的矩陣 選yes之後 所有貼上的按鈕都以陣列命名 Command1(0),Command1(1),Command1(2),Command1(3),..... 然後我只要寫一個副程式 Private Sub Command1(Index as Integer) '程式內容 End Sub 就可以代表所有按鈕所要執行的內容 問題來了 VB2005並不能像VB6一樣用Copy and Past的方式建立物件矩陣 所以 想問問懂VB2005的大大們 該怎麼樣在VB2005建立物件矩陣呢? 還是說有其他方法可以讓我一個副程式,去執行數個不同Index的按鈕呢? 謝謝 更新: 大致了解lbw大大您的作法 有沒有辦法傳回Index的值呢? 因為想直接用Index的值去做 希望Button1傳回1 Button2傳回2 這樣我可以應用這個值與其他陣列一起應用 例如 我要讓Label1.caption=ans(i) 只要我按下Button1,label1.caption就會等於ans(1) 按下Button2,label1.caption就會等於ans(2) 這樣才比較好應用 不然select case的寫法寫出來的東西 大小也跟我每個按鈕分開寫差不多了 不知道有沒有更好的方法可以達到我的要求呢? 謝謝 更新 2: 另外 有辦法按下Button1,label1.caption就會等於ans(1) 按下Button2,label2.caption就會等於ans(2)嗎?? 我希望能夠讓同index的控制項被使用 謝謝

最佳解答:

山不轉路轉 '在VB6中將控制項如按鈕Command1複製再貼上,可以自動產生Command1(0),Command1(1),Command1(2),... '在VB2005中同樣的作法,產生的是Button1,Button2,Button3,...,已大有不同,取消了控制項陣列。 '善用Tag來記錄額外資訊,有取代在VB6中的控制項陣列的Index之妙。 '部落格中有相關以Tag記錄額外資訊的例子:如 'http://tw.myblog.yahoo.com/lk-hsu/article?mid=574&prev=577&next=550&l=f&fid=13 'http://tw.myblog.yahoo.com/lk-hsu/article?mid=709&next=626&l=f&fid=13 '動態控制項建立,例:http://tw.myblog.yahoo.com/lk-hsu/article?mid=626&prev=709&next=600&l=f&fid=13 ' '以下的例子:假設有5個按鈕,分別為Button1,...Button5,用For迴圈分別設定其Tag為1,2,3,4,5 '可以用Serder.Tag取得所按按鈕的Tag值=1,2,3,4,5 '配合一般陣列,以i的值取得陣列的內容。 '比VB6的步驟多了一點點,但有異曲同工之妙,不妨參考使用。 ' Public Class Form1 Dim ans(5) As String Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load For i As Integer = 1 To 5 Me.Controls("Button" & i).Tag = i ans(i) = Chr(64 + i) '假設ans()陣列分別放入A,B,C,D,E Next End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click, _ Button3.Click, Button4.Click, Button5.Click Dim i As Integer = sender.Tag Me.Controls("Label" & i).Text = ans(i) End Sub End Class

其他解答:

aa.jpg

 

此文章來自奇摩知識+如有不便請留言告知

VB.net 是不能跟VB6一樣建立按鈕(控制項)陣列的,它有另外的處理方式。下面的程式中 Button1 Button2 Button3 都會觸發on1_Click,sender 這個參數就是代表由事件來源的object Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, Button3.Click, Button2.Click Select Case CType(sender, Button).Text Case "Button1" Case "Button2" Case "Button3" End Select End Sub 2007-06-18 01:23:45 補充: 把程式改成這樣,會好一點點... '把objec 型態轉成Button 型態 Select Case CType(sender, Button).Text Case Button1.Text Case Button2.Text Case Button3.Text End Select 2007-06-18 11:20:55 補充: 如果真的有這種需求,就我所知,是要自己模擬了,下面這篇文章有做些說明,個人是覺的這種做法更複雜,跟VB6差很多 以 Visual Basic .NET 和 Visual C# .NET 建立控制項陣列 http://www.microsoft.com/taiwan/msdn/library/2002/Apr-2002/whitepaper/vbtchCreatingControlArraysInVisualBasicNETVisualCNET.htm 2007-06-18 11:42:17 補充: 我想的到比較容易的做法是這個,前提是 Button 和 Label 的Name要有對應的關係,利用類似尋求的方式,把Label 找出來 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, Button3.Click, Button2.Click 2007-06-18 11:42:28 補充: Dim but As Button but = CType(sender, Button) Dim ctrl As Control ctrl = Me.Controls.Item("Label" + Microsoft.VisualBasic.Right(but.Text, 1)) If Not ctrl Is Nothing Then ctrl.Text = but.Text End If End Sub4301D6A32CFBE1E9
arrow
arrow

    dlxpxv7 發表在 痞客邦 留言(0) 人氣()