我知道如果我想动态创建现有表单的新实例,我可以简单地执行此操作...
Dim NewForm As New ExistingForm
... NewForm中将提供ExistingForm中所有控件的新实例。
但是,如果我想在单独的现有表单中创建现有控件的新实例,该怎么办?
更具体地说,假设我有两种形式 - FormA
和FormB
。内部FormB
是现有面板(我们称之为ExistingPanel
)。在ExistingPanel
里面有几个按钮,文本框等,按照我想要的方式排列。
好的,所以...在FormA
的按钮点击事件中,我想做这样的事情(显然不起作用,但是应该让你对我的内容有所了解试图完成... ...
Dim NewExistingPanel As New FormB.ExistingPanel
然后我希望NewExistingPanel
包含来自ExistingPanel的所有单个控件的新实例(以便我可以单独动态操作每个控件)。
基本上,我的程序需要在运行时创建几个NewExistingPanel
。在创建之后,我将需要单独访问每个(及其所有子控件)。
我怎样才能做到这一点?到目前为止,我一直在试验这几个小时但没有运气,所以我觉得我会打破并问真正的专业人士:)
答案 0 :(得分:2)
创建新用户控件时,可以使用标记值为键,控件名称为值的字典。然后,您可以使用IndexOfKey方法直接访问控件。
Dim NewForm2 As New Form2
Dim ControlIndex As New Dictionary(Of String, String)
For I = 0 To 2
Dim NewPanel As New WindowsControlLibrary2.MyCustomPanel
NewPanel.Name = "Panel-" + I.ToString
NewPanel.Location = New Point(0 + (NewPanel.Size.Width * I), 0)
NewPanel.Tag = "MyTagValue" + I.ToString
ControlIndex.Add(NewPanel.Tag, NewPanel.Name)
NewForm2.Controls.Add(NewPanel)
NewForm2.Update()
Next
NewForm2.Show()
Dim CurrentPanel As WindowsControlLibrary2.MyCustomPanel =NewForm2.Controls(NewForm2.Controls.IndexOfKey(ControlIndex("MyTagValue1")))
答案 1 :(得分:1)
您可以创建一个用户控件,以您希望的方式布置子控件,然后创建新的实例。添加新>解决方案菜单中的用户控件,然后构建,您的控件应该可以拖到工具箱顶部的设计器中,或像其他任何控件一样在代码中实例化。
扩展我的评论:
Private somePanels As New Dictionary(Of String, YourUserControl)
然后你可以按如下方式添加它们:
Dim c As New YourUserControl()
…
Me.Controls.Add(c)
somePanels.Add("SomeTag", c) ' Instead of using Tag; if your tags are numbers, use a List instead of a Dictionary
并将其视为:
Dim c = somePanels("SomeTag")
答案 2 :(得分:1)
添加带有文本框ang按钮的面板等控件..
在您的项目中 - 添加>用户控制 - >
在这部分中,您可以根据需要制作带有文本框和按钮的面板
将其命名为“myPanel ”并将其另存为“myPanel.vb ” - >或者你想要的任何东西
在您的表单和名为 button1 的按钮中,您可以添加到button1_click事件:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim mypanel1 As New MyPanel
mypanel1.Location = New Point(0, 0)
Controls.Add(mypanel1)
mypanel1.TextBox1.Text = "Hi, Im new"
End Sub
你将在运行时获得你的面板......
你会得到textbox1.text填充“嗨,我是新的......”