Public Class Form1 Private intCtrlCnt As Integer '追加したコントロールのカウンタ Private lblTitle(,) As System.Windows.Forms.Label '動的に配置するラベルの配列 (i,j) Private txtInput(,) As System.Windows.Forms.TextBox '動的に配置するテキストボックスの配列 (i,j)
#Region "フォームロードイベント" Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'コントロールのカウンタ初期化 intCtrlCnt = 0
'コントロールを1グループ追加 Call AddControlGroup()
End Sub #End Region
#Region "コントロール追加ボタンのクリックイベント" Private Sub ButtonAddCtrl_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs _ ) Handles ButtonAddCtrl.Click 'コントロールを1グループ追加 Call AddControlGroup() End Sub #End Region
#Region "コントロール削除ボタンのクリックイベント" Private Sub ButtonDeleteCtrl_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs _ ) Handles ButtonDeleteCtrl.Click 'コントロールを1グループ削除 Call DeleteControlGroup() End Sub #End Region
#Region "コントロールグループを追加するメソッド" Private Sub AddControlGroup() Dim intTabIndex As Integer 'タブインデックス Dim intGroupTopLocation As Integer 'コントロールグループの位置 Top
Const LABEL_CTRL_NAME As String = "lblTitle" 'ラベルのコントロール名 Const TEXT_CTRL_NAME As String = "txtInput" 'テキストのコントロール名
Const LABEL_SIZE_WIDTH As Integer = 55 'ラベルサイズ Width Const LABEL_SIZE_HEIGHT As Integer = 15 'ラベルサイズ Height Const TEXT_SIZE_WIDTH As Integer = 160 'ラベルサイズ Width Const TEXT_SIZE_HEIGHT As Integer = 20 'ラベルサイズ Height
Const LABEL_LOCATION_TOP As Integer = 24 'ラベルの位置 Top Const LABEL_LOCATION_LEFT_A As Integer = 150 'ラベルAの位置 Left Const LABEL_LOCATION_LEFT_B As Integer = 400 'ラベルBの位置 Left Const CONTROL_LOCATION_INTERVAL As Integer = 35
'コントロールグループの配置間隔
Const CONTROL_MAX_NUM As Integer = 16 'コントロールの追加最大数
'コントロールが追加最大数を超える場合は処理しない If (intCtrlCnt + 1) > CONTROL_MAX_NUM Then MsgBox("これ以上の追加は無理", MsgBoxStyle.Information + MsgBoxStyle.OkOnly) Exit Sub End If
追加、削除ボタンを押すとlabel1と2、textbox1と2を一つのグループとして追加、削除できるようにしたいのですがイベントハンドラのところがうまくいきません。
どのようにすればよいのかどなたか助けていただけないでしょうか??
Public Class Form1
Private intCtrlCnt As Integer
'追加したコントロールのカウンタ
Private lblTitle(,) As System.Windows.Forms.Label
'動的に配置するラベルの配列 (i,j)
Private txtInput(,) As System.Windows.Forms.TextBox
'動的に配置するテキストボックスの配列 (i,j)
#Region "フォームロードイベント"
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'コントロールのカウンタ初期化
intCtrlCnt = 0
'コントロールを1グループ追加
Call AddControlGroup()
End Sub
#End Region
#Region "コントロール追加ボタンのクリックイベント"
Private Sub ButtonAddCtrl_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs _ ) Handles ButtonAddCtrl.Click
'コントロールを1グループ追加
Call AddControlGroup()
End Sub
#End Region
#Region "コントロール削除ボタンのクリックイベント"
Private Sub ButtonDeleteCtrl_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs _ ) Handles ButtonDeleteCtrl.Click
'コントロールを1グループ削除
Call DeleteControlGroup()
End Sub
#End Region
#Region "コントロールグループを追加するメソッド"
Private Sub AddControlGroup()
Dim intTabIndex As Integer
'タブインデックス
Dim intGroupTopLocation As Integer
'コントロールグループの位置 Top
Const LABEL_CTRL_NAME As String = "lblTitle"
'ラベルのコントロール名
Const TEXT_CTRL_NAME As String = "txtInput"
'テキストのコントロール名
Const LABEL_SIZE_WIDTH As Integer = 55
'ラベルサイズ Width
Const LABEL_SIZE_HEIGHT As Integer = 15
'ラベルサイズ Height
Const TEXT_SIZE_WIDTH As Integer = 160
'ラベルサイズ Width
Const TEXT_SIZE_HEIGHT As Integer = 20
'ラベルサイズ Height
Const LABEL_LOCATION_TOP As Integer = 24
'ラベルの位置 Top
Const LABEL_LOCATION_LEFT_A As Integer = 150
'ラベルAの位置 Left
Const LABEL_LOCATION_LEFT_B As Integer = 400
'ラベルBの位置 Left
Const CONTROL_LOCATION_INTERVAL As Integer = 35
'コントロールグループの配置間隔
Const CONTROL_MAX_NUM As Integer = 16
'コントロールの追加最大数
'コントロールが追加最大数を超える場合は処理しない
If (intCtrlCnt + 1) > CONTROL_MAX_NUM Then
MsgBox("これ以上の追加は無理", MsgBoxStyle.Information + MsgBoxStyle.OkOnly)
Exit Sub
End If
'コントロールカウンタ + 1
intCtrlCnt = intCtrlCnt + 1
'動的配列の再宣言
ReDim Preserve lblTitle(2, intCtrlCnt)
ReDim Preserve txtInput(2, intCtrlCnt)
'タブインデックスを算出する
intTabIndex = (intCtrlCnt - 1) * 4 + 1
'配置する高さの基準を算出
intGroupTopLocation = (intCtrlCnt - 1) * CONTROL_LOCATION_INTERVAL + 1
'ラベルAのインスタンスを生成する
Me.lblTitle(0, intCtrlCnt - 1) = New System.Windows.Forms.Label
'ラベルのプロパティ設定
With Me.lblTitle(0, intCtrlCnt - 1)
.Name = LABEL_CTRL_NAME & "A" 'コントロール名
.Text = "項目A-" & intCtrlCnt & ":" '
.Size = New Size(LABEL_SIZE_WIDTH, LABEL_SIZE_HEIGHT)
'サイズ
.Location = New Point(LABEL_LOCATION_LEFT_A, LABEL_LOCATION_TOP + intGroupTopLocation) '
.TabIndex = intTabIndex 'タブインデックス
.BackColor = Color.LightBlue
'背景色
.Visible = True
.Enabled = True
End With
Me.Controls.Add(Me.lblTitle(0, intCtrlCnt - 1)) 'フォームにコントロール追加
'テキストAのインスタンスを生成する
Me.txtInput(0, intCtrlCnt - 1) = New System.Windows.Forms.TextBox
'テキストのプロパティ設定
With Me.txtInput(0, intCtrlCnt - 1)
.Name = TEXT_CTRL_NAME & "A"
'コントロール名
.Text = vbNullString
'テキスト
.Size = New Size(TEXT_SIZE_WIDTH, TEXT_SIZE_HEIGHT)
'サイズ
.Location = New Point(LABEL_LOCATION_LEFT_A + 60, _
LABEL_LOCATION_TOP - 4 + intGroupTopLocation) '
.TabIndex = intTabIndex + 1
'タブインデックス
.Visible = True
.Enabled = True
End With
Me.Controls.Add(Me.txtInput(0, intCtrlCnt - 1))
'フォームにコントロール追加
'ラベルBのインスタンスを生成する
Me.lblTitle(1, intCtrlCnt - 1) = New System.Windows.Forms.Label
'ラベルのプロパティ設定
With Me.lblTitle(1, intCtrlCnt - 1)
.Name = LABEL_CTRL_NAME & "B"
'コントロール名
.Text = "項目B-" & intCtrlCnt & ":"
'テキスト
.Size = New Size(LABEL_SIZE_WIDTH, LABEL_SIZE_HEIGHT)
'サイズ
.Location = New Point(LABEL_LOCATION_LEFT_B, _
LABEL_LOCATION_TOP + intGroupTopLocation)
'位置
.TabIndex = intTabIndex + 2
'タブインデックス
.BackColor = Color.LightPink
'背景色
.Visible = True
.Enabled = True
End With
Me.Controls.Add(Me.lblTitle(1, intCtrlCnt - 1))
'フォームにコントロール追加
'テキストBのインスタンスを生成する
Me.txtInput(1, intCtrlCnt - 1) = New System.Windows.Forms.TextBox
'テキストのプロパティ設定
With Me.txtInput(1, intCtrlCnt - 1)
.Name = TEXT_CTRL_NAME & "B"
'コントロール名
.Text = vbNullString
'テキスト
.Size = New Size(TEXT_SIZE_WIDTH, TEXT_SIZE_HEIGHT)
'サイズ
.Location = New Point(LABEL_LOCATION_LEFT_B + 60, _
LABEL_LOCATION_TOP - 4 + intGroupTopLocation)
'位置
.TabIndex = intTabIndex + 3
'タブインデックス
.Visible = True
.Enabled = True
End With
Me.Controls.Add(Me.txtInput(1, intCtrlCnt - 1))
'フォームにコントロール追加
'イベントハンドラの関連付けは??---------------------------
'AddHandler Me.txtInput(0, intCtrlCnt - 1).Click, _
' AddressOf Me.txtInput_Click
'AddHandler Me.txtInput(1, intCtrlCnt - 1).Click, _
' AddressOf Me.txtInput_Click
'-------------------------------------------------------------------
End Sub
#End Region
#Region "コントロールグループを削除するメソッド"
Private Sub DeleteControlGroup()
'コントロールグループが1つの場合
If intCtrlCnt <= 1 Then
'処理しない
Exit Sub
End If
'フォーム上からコントロールを削除
Me.Controls.Remove(Me.lblTitle(0, intCtrlCnt - 1))
Me.Controls.Remove(Me.lblTitle(1, intCtrlCnt - 1))
Me.Controls.Remove(Me.txtInput(0, intCtrlCnt - 1))
Me.Controls.Remove(Me.txtInput(1, intCtrlCnt - 1))
'コントロールカウンタ - 1
intCtrlCnt = intCtrlCnt - 1
'動的配列の再宣言
ReDim Preserve lblTitle(2, intCtrlCnt)
ReDim Preserve txtInput(2, intCtrlCnt)
End Sub
#End Region
End Class