2

あなたが私の悩みを助けてくれることを願っています。親 MDI (frmParent.vb) として 1 つのフォームがあり、2 つの子フォーム (frmChild01.vb & frmChild02.vb) があります。

以下の親フォームのコード。

Private Sub OpenChild01ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OpenChild01ToolStripMenuItem.Click
    Dim child01 As frmChild01

    child01 = New frmChild01()
    child01.MdiParent = Me
    child01.Show()
End Sub

Private Sub OpenChild02ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OpenChild02ToolStripMenuItem.Click
    Dim child02 As frmChild02

    child02 = New frmChild02()
    child02.MdiParent = Me
    child02.Show()
End Sub

frmChild01 には button1 があります
frmChild02 には label1があります

私の問題は、ユーザーがボタン1をクリックしたときにlabel1.textを設定する方法です。よろしくお願いします
...

4

2 に答える 2

1

これを行うための創造的な方法はたくさんあります。しかし、最終的には Child1 と Child2 の間の通信チャネルを提供する必要があります。

最も直接的な方法は to Pass a Referenceof frmChild02tofrmChild01です。label1アクセスできるように公開する必要がありfrmChidl02ます(または、設定を処理する公開メソッドを提供できます。

作成時に frmChild02 への参照ある場合にのみ機能しますfrmChild01。これらのフォームを起動するための個別のボタンがあるように見えるため、より複雑になる可能性があります。これを処理する 1 つの方法は、イベントを使用して通信を処理することです。Mdi 親に、子フォームからのイベントをリッスン/発生させます。したがって、ボタンをクリックするとfrmChild01、Mdi の親がそのイベントをリッスンし、'ButtonClickInForm1' などと呼ばれる新しいイベントを発生させます。frmChild02そのイベントを購読してください。そのインスタンスがある場合frmChild02、ボタンのクリックに応答してそのラベルを更新します。

于 2012-06-09T10:01:24.757 に答える
0

ChildForm02 が既にロードされているかどうかを確認する必要があります。そうでない場合は、ラベルのテキスト プロパティを設定する前にロードする必要があります。次のようになります。

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click

    If MDIParent1.ChildForm2 Is Nothing OrElse MDIParent1.ChildForm2.Visible = False Then
        MDIParent1.ChildForm2 = New Form2
        MDIParent1.ChildForm2.MdiParent = MDIParent1
        MDIParent1.ChildForm2.Text = "Window "
        MDIParent1.ChildForm2.Show()
    End If
    MDIParent1.ChildForm2.Label1.Text = "your text here"

End Sub

また、ソリューション内のどこからでもアクセスできるように、MdiParent フォームで子フォームを Public として宣言する必要があります。

Public ChildForm1 As Form1
Public ChildForm2 As Form2
于 2012-06-11T01:27:43.833 に答える