|
Azuleanさん、とくまさん、Miraさん
解決済みにしていたので、返信に気づかずすみませんでした。
質問がうまく伝わってないようなので、申し訳ありません。
質問の主旨は、同じコントロールが複数あったばあいに以下のようなコードにしないようにするには
どうすればいいのかを伺いたかったのです。
Private Sub Button_Click(ByVal Sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, _
Button2.Click, Button3.Click, 〜〜〜〜〜〜〜〜〜, Button100.Click
Select Case Sender.name
Case "Button1"
Test(Textbox1, Textbox100)
Case "Button2"
Test(Textbox2, Textbox102)
Case "Button3"
Test(Textbox3, Textbox103)
:
:
:
:
Case "Button100"
Test(Textbox100, Textbox200)
End Select
end sub
まりもんに提示して頂いたとおり、UserControlを作成して複数のUserControlを動的に追加することにしました。
ただ、まりもんのコード
>>Test(Sender.Value1, Sender.Value2)
ですと Sender にbutton名が入るので以下のようにしました。
Dim uc As UserControl1 = DirectCast(Sender.Parent, UserControl1)
Test(uc.Textbox1, uc.Textbox2)
実際のコードはこんな感じです。
UserControlにbutton1,Textbox1,Textbox2を配置しています。
Public Class Form1
Private MyUserControl() As UserControl1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim i As Integer = 0
Me.Width = 1000
Me.Height = 400
'UserControlを配列に10個用意
Me.MyUserControl = New UserControl1(9) {}
Me.SuspendLayout()
'UserControlを動的に追加
For i = 0 To Me.MyUserControl.Length - 1
Me.MyUserControl(i) = New UserControl1
Me.MyUserControl(i).Name = "UserControl" + i.ToString()
Me.MyUserControl(i).Size = New Size(200, 200)
If i < 5 Then
Me.MyUserControl(i).Location = New Point(i * 200, 0)
Else
Me.MyUserControl(i).Location = New Point(i * 200 - 1000, 200)
End If
AddHandler Me.MyUserControl(i).Button1.Click, _
AddressOf Me.Button1_Click
Next i
Me.Controls.AddRange(Me.MyUserControl)
Me.ResumeLayout(False)
End Sub
Private Sub Button1_Click(ByVal Sender As Object, ByVal e As EventArgs)
Dim uc As UserControl1 = DirectCast(Sender.Parent, UserControl1)
Test(uc.Textbox1, uc.Textbox2)
End Sub
Private Sub Test(ByVal a As TextBox, ByVal b As TextBox)
a.Text = "a"
b.Text = "b"
End Sub
End Class
|