【问题标题】:How to access public subs of dynamically loaded user control in a panel如何在面板中访问动态加载的用户控件的公共子组件
【发布时间】:2018-09-30 02:47:20
【问题描述】:

我在表单中有一个面板和一个按钮以及 2 个用户控件,我在面板中动态加载了第一个用户控件,然后在 userControl1 中我有一个方法,当我单击表单中的按钮时我想访问它然后在面板中将显示的用户控件更改为userControl2,我该怎么做?

form1 代码:

Public Class form1

    Private Sub form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
           Dim control1 = New UserControl1

           Panel1.Controls.Add(control1)
           control1.Location = New Point(0, 0)
           control1.Size = New Point(1351, 533)
    End Sub

End Class

UserControl1 代码:

Public Class UserControl1

    Public Sub doSomething()
           'Do something'
    End Sub

End Class

【问题讨论】:

  • 请出示您的代码。
  • 已添加代码。我试图简化它,因为我认为以这种方式理解它会更容易。我想要的是在表单中按钮的单击事件中访问该 doSomething() 并将显示的用户控件更改为面板中的 UserControl2。
  • 您只需要引用您创建的控件。该代码让它超出范围
  • 你能展示一下它是怎么做的吗?当它带有用户控件时,我是相当新的..
  • 在单击按钮时它是否始终是 UserControl1,或者它可能是多个不同控件之一?

标签: vb.net user-controls panel


【解决方案1】:

好的,我会尽可能多地从您的问题中提取并给您展示一个示例,您可以通过多种不同的方式来做到这一点,因此,可能无法 100% 回答您的问题,但会为您提供足够的信息你想要的。

我假设您只有一个 control1 和一个 control2。

我的示例将交替进行,并在每次单击主窗体按钮时访问活动(显示的)用户控件中的子例程。

我会放在一个模块中:

Public control1 As New UserControl1
Public control2 As New UserControl2

在 UserControl1 中放置:

Public Sub DoSomething()
    Me.BackColor = Color.Black
End Sub

在 UserControl2 中放置:

Public Sub DoSomething()
    Me.BackColor = Color.White
End Sub

在您的 FormLoad 事件中放置:

    control1.Location = New Point(0, 0)
    control1.Size = New Point(1351, 533)
    Panel1.Controls.Add(control1)

在您的 Button1 点击事件中放置:

    Select Case Panel1.Contains(control1)
        Case True
            'Remove UserControl1 - Add UserControl2
            Panel1.Controls.Remove(control1)
            control2.Location = New Point(0, 0)
            control2.Size = New Point(1351, 533)
            Panel1.Controls.Add(control2)
            control2.DoSomething()
        Case False
            'Remove UserControl2 - Add UserControl1
            Panel1.Controls.Remove(control2)
            control1.Location = New Point(0, 0)
            control1.Size = New Point(1351, 533)
            Panel1.Controls.Add(control1)
            control1.DoSomething()
    End Select

上面是检查面板中的哪个 UserControl 并交替使用它并调用“DoSomething”。这只是给你一个想法的例子。您想要的可能会有所不同,您的第二个 UserControl 中可能有一个按钮,如果有,请修改开关代码以适应。

【讨论】:

  • 谢谢!除了 control2.DoSomething() 和 control1.DoSomething() 之外,代码似乎都在工作。它说“'DoSomething' 不是 UserControl2 的成员”,即使我正确创建了子和模块。
  • 您是否将它们设置为“公共”?您是否在模块中将 UserControls 设置为 Public?
  • 我不知道如何继续......我想给你我的项目,或者接收你的项目,以便我们进行比较。我不知道该怎么做。
  • 你把 UserControls 声明放在模块中了吗?
  • 是的,我把它放在一个模块中,上面写着“'DoSomething' 不是 UserControl2 的成员”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-27
相关资源
最近更新 更多