2015-08-09 37 views
0

您好我想在运行时复制现有表单,以便可以多次使用。有喜欢VB2008在运行时创建重复的现有表单

Sub loadForm() 
    Dim childForm As New myForm '<--- 
    With childForm 
     .TopLevel = False 
     .StartPosition = FormStartPosition.CenterScreen 
     .Top = 199 
     .BringToFront() 
     Panel1.Controls.Add(childForm) 
     .Show() 
    End With 
End Sub 

单的方式,但我想这种形式应该是一式两份参考我想

Sub LoadForm(ByVal childForm As Form)  
    'where childForm can be any myform1/mysale/mypurchase etc. 
    With childForm 
     .TopLevel = False 
     .StartPosition = FormStartPosition.CenterScreen 
     .Top = 199 
     .BringToFront() 
     Panel1.Controls.Add(childForm) 
     .Show() 
    End With 
End Sub 

在那里我打电话

LoadForm(myform1) 
LoadForm(mysale) 

此不重复我也试着创建

Dim newChildForm as new childForm ' its give error 1 Type 'childForm' not defined 
+0

的Visual Basic允许你[作为变量使用的一种形式的类型名称](http://stackoverflow.com/q/6048889/11683),神奇地拥有该表单的隐式创建的实例。你不应该使用这个功能。使用'New'总是创建表单的实例,并且绝对不要使用其类型名称引用实例。如果这一点不能解决您的问题,请澄清。 – GSerg

+0

在这些片段中没有明显的“重复”尝试。无论如何,你无法克隆表单对象。你需要'新建myForm1'来创建另一个实例。这里最明显的缺陷是你在同一个位置显示表格,你只能看到最上面的一个。改为使用FlowLayoutPanel。或者选择一个合适的位置。 –

+0

hans-passant显示位置是固定的,但我拖动该窗体并调用LoadForm它将重新定位我已经绘制的窗体。 – mortypk

回答

0

感谢GSerg的提示

解决问题 所有我需要做的是更换

loadForm(myform) 

loadForm(New myform)