所以我有两种形式(Form1和Form2)。 Form2询问需要在Form1中生成多少行特定面板(TxtBoxPanel)。该面板将包含三个框,因此如果用户说要在Form1中生成5行,则会有5个面板,每个面板有3个文本框。以两种不同形式访问在运行时进行的控制
窗体2显示为所示的图像中: Form2
下面是在窗体2的代码:
Public Class Form2
Public Rows As Integer
Public Sub Button1_Click(sender As Object, e As EventArgs) Handles Ok.Click
Rows = RowNum.Text 'Row num being box to enter no. of rows
For index = 1 To Rows
Dim TxtBoxPanel(index) 'Control Array
Dim LeftBox(index) 'Control Array
Dim CenterBox(index) 'Control Array
Dim RightBox(index) 'Control Array
Dim YAxis As Integer ' for adding TxtBoxPanel in new row
'adding the textbox panel
TxtBoxPanel(index) = New Panel
Form1.MajorPanel.Controls.Add(TxtBoxPanel(index)) 'referring to form1 as panel needed in form1
TxtBoxPanel(index).Name = ("txtBoxPanel" & index)
TxtBoxPanel(index).Size = New Size(610, 32)
YAxis += 32
TxtBoxPanel(index).Location = New Point(3, YAxis)
'adding left box
LeftBox(index) = New TextBox
TxtBoxPanel(index).Controls.Add(LeftBox(index))
LeftBox(index).Name = ("LeftBox" & index)
LeftBox(index).Text = (index)
LeftBox(index).Size = New Size(100, 20)
LeftBox(index).Location = New Point(3, 3)
'adding center box
CenterBox(index) = New TextBox
TxtBoxPanel(index).Controls.Add(CenterBox(index))
CenterBox(index).Name = ("CenterBox" & index)
CenterBox(index).Text = (index)
CenterBox(index).Size = New Size(100, 20)
CenterBox(index).Location = New Point(258, 3)
'adding right box
RightBox(index) = New TextBox
TxtBoxPanel(index).Controls.Add(RightBox(index))
RightBox(index).Name = ("RightBox" & index)
RightBox(index).Size = New Size(100, 20)
RightBox(index).Text = (index)
RightBox(index).Location = New Point(495, 3)
Next index
Close() 'After generation of controls, Form2 closes
End Sub
End Sub
End Class
的框在Form1中生成以及示于下面的图像: Controls in Form1
现在,我想遍历每个“LeftBox”实例,以便在单击Form1上的“消息”按钮时可以打印出每个实例的“Name”属性。但是,生成LeftBox的代码位于Form2中,我发现很难在Form1中引用它。
请注意,我生成使用数组的控件,因为我读的地方,他们更容易地引用对照组相比,使用Controls.Find
所以,问题是,我怎么能引用控制在Form1中后,他们在运行时生成?
这是我wtried引用LeftBox,例如较早前:
' FINDING CONTROLS PROGRAMATICALLY
For Index = 1 To Form2.Rows
Dim LBox As TextBox
For Each LBox In Me.Controls.Find("LeftBox" & Index, True)
If (LBox.Name.Contains("LeftBox") = True) Then
MsgBox(LBox.Text, MsgBoxStyle.Information, "Testing")
Else
MsgBox("There's a problem", MsgBoxStyle.Information, "Testing")
End If
Next
Next
谢谢。
'Form1'有一个'Controls'集合,它将包含所有的控件。你检查了吗?显示您用来访问控件的代码。 –
请不要把代码放入评论中。相反,请编辑您的问题并在其中添加代码。我有点困惑。我认为你所有的'TxtBoxPanel'控件都在'Form1'上。你添加的代码似乎在'Form2'中寻找它们? –
对不起@Chris,我只是编辑了包含代码的问题。 TxtBoxPanel确实生成到Form1上,但生成面板到form1上的代码位于form2上。这就是为什么我认为我必须参考form2,因为代码实际上在那里 – Amin84