1

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

4

2 回答 2

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将立即被所有表单看到。

于 2012-12-07T17:14:59.230 回答
2

改变这个:

Dim f As Form

到您的表单的实际实现:

Dim f As Order

或者只是捷径:

Dim f As New Order
于 2012-12-07T17:16:09.573 回答