如何访问面板中动态加载的用户控件的公共子目录

时间:2018-09-30 02:47:20

标签: vb.net user-controls panel

我在一个表单中有一个面板和一个按钮以及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

1 个答案:

答案 0 :(得分:0)

好的,我会尽可能地从您的问题中拿出一个例子,您可以通过许多不同的方式来执行此操作,因此,可能无法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中可能有一个按钮,如果有,请修改开关代码以适合。