我目前陷入了如何在两种形式之间共享控制的问题。 这就是我想要做的: - 我有几种有自己功能的表格。 - 现在我想把它们全部集中在一个主体上。
通常我会通过创建以下代码来完成此操作:
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim f As New Form2
GroupBox1.Controls.Add(f.Get_Groupbox_controls)
End Sub
End Class
这将添加Form2.Groupbox1中包含的所有控件,并将其添加到Form1.Groupbox1。 通常这对我来说很好。
其中“Get_Groupbox_controls”是返回Form2.Groupbox1
的函数或者,如果这不起作用,我将使用transparancykey在form1上显示整个form2。 (这不是一个需要解决方案,你必须做很多位置计算,但它有效)
但是现在我得到了一张有很多内容的表格。对于mainform我只想显示一个Container(groupbox),但是当用户点击“More setting ..”时,它必须显示整个表单以及所有控件。
问题是当我使用container.controls.add()函数时,我得到一个异常“在创建窗口句柄之前,无法在控件上调用Invoke或BeginInvoke” 错误是合乎逻辑的,因为尚未制作整个表单。但为了使表单正常工作,它必须更新“隐藏”的UI控件(标签/按钮/等)
所以主要的问题是,如何将一系列控件从Form1“移植”到form2并保留所有处理程序等...在Form1上
答案 0 :(得分:2)
如果您有两个表单要放置相同的外观/功能GroupBox部分,您可能需要考虑创建一个包含共享功能的自定义用户控件,并且可以放在每个表单中。用户控件甚至可以通过Visual Studio中的表单设计器添加到表单中。