You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将其他窗体的Panel控件显示到主窗体中?

解决方案

方法一:直接移用目标窗体中的Panel

如果你不需要保留原窗体(frm1/frm2)中的Panel,可以直接将该Panel从原窗体移除,添加到主窗体的显示容器中:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    PanelDisplay.Controls.Clear()
    
    ' 确保目标窗体已实例化且未被释放
    If Not frm1.IsDisposed Then
        ' 将Panel从原窗体中分离
        frm1.Panel1.Parent = Nothing
        ' 添加到主窗体的显示Panel
        PanelDisplay.Controls.Add(frm1.Panel1)
        ' 设置Panel自适应容器大小
        frm1.Panel1.Dock = DockStyle.Fill
    End If
End Sub

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    PanelDisplay.Controls.Clear()
    
    If Not frm2.IsDisposed Then
        frm2.Panel2.Parent = Nothing
        PanelDisplay.Controls.Add(frm2.Panel2)
        frm2.Panel2.Dock = DockStyle.Fill
    End If
End Sub

注意:这种操作会把Panel从原窗体中移除,后续原窗体将无法再使用这个Panel。


方法二:重构为用户控件(更推荐)

如果需要同时保留原窗体和主窗体中的Panel内容,建议将frm1/frm2中Panel的内容重构为独立的用户控件:

  1. 新建用户控件(比如uc1和uc2),把frm1中Panel的所有控件复制到uc1,frm2的复制到uc2。
  2. 在frm1和frm2中,直接添加对应的用户控件(替代原来的Panel)。
  3. 在主窗体中,点击按钮时直接实例化并添加用户控件:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    PanelDisplay.Controls.Clear()
    Dim uc As New uc1()
    uc.Dock = DockStyle.Fill
    PanelDisplay.Controls.Add(uc)
End Sub

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    PanelDisplay.Controls.Clear()
    Dim uc As New uc2()
    uc.Dock = DockStyle.Fill
    PanelDisplay.Controls.Add(uc)
End Sub

这种方式可以实现控件逻辑的复用,避免窗体间的控件依赖问题。


内容的提问来源于stack exchange,提问作者Eren Birb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 18:01:15