在VB.NET中从MDI父表单调整子表单的公共变量

时间:2012-12-07 16:50:03

标签: vb.net forms global-variables mdichild mdiparent

我有一个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父母和孩子之间传递变量是很常见的,但是尽管尝试了我在这里看到的一些选项,但它似乎并没有起作用。这是错误的做法吗?

2 个答案:

答案 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