创建现有控件的新实例? (听起来有点复杂)

时间:2013-05-25 22:22:04

标签: vb.net winforms .net-2.0

我知道如果我想动态创建现有表单的新实例,我可以简单地执行此操作...

Dim NewForm As New ExistingForm

... NewForm中将提供ExistingForm中所有控件的新实例。

但是,如果我想在单独的现有表单中创建现有控件的新实例,该怎么办?

更具体地说,假设我有两种形式 - FormAFormB。内部FormB是现有面板(我们称之为ExistingPanel)。在ExistingPanel里面有几个按钮,文本框等,按照我想要的方式排列。

好的,所以...在FormA的按钮点击事件中,我想做这样的事情(显然不起作用,但是应该让你对我的内容有所了解试图完成... ...

Dim NewExistingPanel As New FormB.ExistingPanel

然后我希望NewExistingPanel包含来自ExistingPanel的所有单个控件的新实例(以便我可以单独动态操作每个控件)。

基本上,我的程序需要在运行时创建几个NewExistingPanel。在创建之后,我将需要单独访问每个(及其所有子控件)。

我怎样才能做到这一点?到目前为止,我一直在试验这几个小时但没有运气,所以我觉得我会打破并问真正的专业人士:)

3 个答案:

答案 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按钮的面板等控件..

  1. 在您的项目中 - 添加>用户控制 - >
    在这部分中,您可以根据需要制作带有文本框和按钮的面板 将其命名为“myPanel ”并将其另存为“myPanel.vb ” - >或者你想要的任何东西

  2. 在您的表单和名为 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
    
  3. 你将在运行时获得你的面板......

    你会得到textbox1.text填充“嗨,我是新的......”