我有一个MDI父表单,可以打开名为" Order"的子表单。订单表格有一个允许用户打印订单的按钮。 Order表单的开头定义了一个打印大小变量:
Public Class Order
Public psize As String
Private Sub button_order_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles process_order.Click
' Code to handle the order and then print, etc
现在父表单也有一个psize
变量,默认设置为" A4"。
只有当有人点击“父窗口”菜单条上的某个菜单项时,才会发生这种情况:
psize = "A6"
默认情况下,只要父窗口打开一个新的订单表单,我就需要将子表单的psize
变量设置为自己的psize
值。像这样:
Dim f As Form
f = New Order
f.MdiParent = Me
f.psize = Me.psize ' BUT THIS LINE DOESN'T WORK
f.Show()
我得到f.psize不是表单成员的错误。 我知道在MDI父母和孩子之间传递变量是很常见的,但是尽管尝试了我在这里看到的一些选项,但它似乎并没有起作用。这是错误的做法吗?
答案 0 :(得分:2)
该属性不可用的原因是因为您对变量使用了错误的类型。基类Form
类型未定义该属性。相反,您派生的Order
类型可以。你可以这样做:
Dim f As Order
f = New Order
f.MdiParent = Me
f.psize = Me.psize
f.Show()
<强>更新强>
正如您在下面的评论中所说,您真正需要做的是能够在所有表单之间共享动态设置,以便您可以随时更改设置并使其影响已经存在的所有表单已经显示出来最好的方法是创建一个存储所有共享设置的新类,例如:
Public Class Settings
Public PaperSize As String = "A6"
End Class
正如您所看到的,通过这样做,您可以轻松地将所有默认设置集中在设置类中,这是一个额外的好处。然后,您需要将Order
表单中的公共属性更改为新的Settings
类型,例如:
Public Class Order
Inherits Form
Public Settings As Settings
End Class
然后,您需要在MDI父表单中创建共享设置对象,然后在创建时将其传递给每个Order
表单:
Public Class MyParentForm
Private _settings As New Settings()
Private Sub ShowNewOrderForm()
Dim f As New Order()
f.MdiParent = Me
f.Settings = _settings
f.Show()
End Sub
Private Sub ChangePaperSize(size As String)
_settings.PaperSize = size
End Sub
End Class
然后,由于父表单和所有子Order
表单共享相同的Settings
对象,因此所有表单都会立即看到对该Settings
对象所做的更改。
答案 1 :(得分:2)
改变这个:
Dim f As Form
表单的实际实现:
Dim f As Order
或只是快捷方式:
Dim f As New Order