سلام.
شما اگه چند تا برای مثال کلید روی صفحه دارید و میخواهید با یک ایونت کنترلشون کنید میتونید از کد زیر استفاده کنید.
کد:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click, Button3.Click
Dim Index As Integer
Index = CInt(Mid(sender.Name, 7))
Select Case Index
Case Is = 1
MessageBox.Show("button1 Clicked")
'Type your code here
Case Is = 2
MessageBox.Show("button2 Clicked")
'Type your code here
Case Is = 3
MessageBox.Show("button3 Clicked")
'Type your code here
End Select
End Sub
اما اگه میخواهی یه آرایه از کنترل هات داشته باشی و ران تایم کم و زیادشون کنی و حالت داینامیک داشته باشی کار کمی مشکل میشه.
در این صورت باید یه کلاس برای مدیریت آرایه کنترل هات بنویسی.
برای این کار از نمونه کلاس زیر که برای کنترل Button هست استفاده کن.
کد:
Public Class ButtonArray
Inherits System.Collections.CollectionBase
Private ReadOnly HostForm As System.Windows.Forms.Form
Public Function AddNewButton() As System.Windows.Forms.Button
' Create a new instance of the Button class.
Dim aButton As New System.Windows.Forms.Button()
' Add the button to the collection's internal list.
Me.List.Add(aButton)
' Add the button to the controls collection of the form
' referenced by the HostForm field.
HostForm.Controls.Add(aButton)
' Set intial properties for the button object.
aButton.Top = Count * 25
aButton.Left = 100
aButton.Tag = Me.Count
aButton.Text = "Button " & Me.Count.ToString
AddHandler aButton.Click, AddressOf ClickHandler
Return aButton
End Function
Public Sub New(ByVal host As System.Windows.Forms.Form)
HostForm = host
Me.AddNewButton()
End Sub
Default Public ReadOnly Property Item(ByVal Index As Integer) As System.Windows.Forms.Button
Get
Return CType(Me.List.Item(Index), System.Windows.Forms.Button)
End Get
End Property
Public Sub Remove()
' Check to be sure there is a button to remove.
If Me.Count > 0 Then
' Remove the last button added to the array from the host form
' controls collection. Note the use of the default property in
' accessing the array.
HostForm.Controls.Remove(Me(Me.Count - 1))
Me.List.RemoveAt(Me.Count - 1)
End If
End Sub
Public Sub ClickHandler(ByVal sender As Object, ByVal e As System.EventArgs)
MessageBox.Show("you have clicked button " & CType(CType(sender, _
System.Windows.Forms.Button).Tag, String))
End Sub
End Class
بعد میتونی یه نمونه از این کلاس در پروژت ایجاد کنی و چون کنترل ها باید به یه فرمی وابسته باشن در فرم لود کد زیر رو بنویس.
کد:
Dim MyControlArray As ButtonArray
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
MyControlArray = New ButtonArray(Me)
End Sub
بقیشم دیگه سادست.
دستور زیر یه باتن رو فرم اضافه میکنه.
کد:
Private Sub btnAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAdd.Click
MyControlArray.AddNewButton()
End Sub
و کد زیر هم آخرین باتن رو حذف میکنه.
کد:
Private Sub btnRemove_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRemove.Click
MyControlArray.Remove()
End Sub