1

「Order」という子フォームを開くことができる MDI 親フォームがあります。注文フォームには、ユーザーが注文を印刷できるボタンがあります。注文フォームには、最初に定義された印刷サイズ変数があります。

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」に設定されています。これは、親ウィンドウのメニュー ストリップのメニュー項目の 1 つをクリックしたときにのみ発生します。

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を共有するため、そのオブジェクトに加えられた変更はすべてのフォームにすぐに反映されます。SettingsSettings

于 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 に答える