現在、私のWindowsフォームには、いくつかのWinFormsがあります。 1つのWinFormはメインメニューとして機能し、別のフォームを2次ウィンドウとして単独で呼び出すことになっています。フォーム間で渡されたデータの処理
Private Sub btnMainGame_Click(sender As Object, e As EventArgs) Handles btnMainGame.Click
' This is the button to call up the main game controller. So simply hide this form aned then open the new form.
Dim frmController As New frmControllerScreen
frmController.Show()
Me.Hide() ' Happens on .Close as well
End Sub
上記のコードは、さらに多くのオプションを処理するために使用される別のWinFormを呼び出します。ユーザーが特定のボタンをクリックすると、サブフォームが再び作成されます。
Dim OpenNewGameWindow As New frmGameConfig
OpenNewGameWindow.ShowDialog(Me)
Me.DialogResult = DialogResult.None ' Used to prevent the subform from closing the main form when it catches a dialog result.
frmGameConfigでは、プログラムはデータを受け取り、それを呼び出したフォームに戻すことになっています。
Private Sub btnNewGameStartGame_Click(sender As Object, e As EventArgs) Handles btnNewGameStartGame.Click
' ... Skipped code...
frmControllerScreen.MasterQuestionList = QuestionList
frmControllerScreen.blnBankedTime = cbBankedTime.Checked
' ... Skipped code...
End Sub
しかし、frmControllerはMasterQuestionListを参照しようとすると...それは、それが設定されていないかのようにnullreferenceエラーを返します。私はこのコードを作ったときに物事が面白い取得するのはここ
だ...
は、frmControllerScreenは実際にスタートアップフォームでした。今度はこのフォームをfrmMainMenuに戻すと、常にNullReference
のエラーが出ます。
私の質問:親フォームからインスタンス化されていれば、あるフォームから次のフォームに情報を渡す方法を教えてください。 (注:私は宣言を "モジュール全体の"変数としてPublicに移しました...同じことは何も起こりませんが)同じエラーは先に進み、frmController.MasterQuestionList
と宣言しても起こります。
あなたは 'this'すなわちメインフォームに' MdiParent'プロパティをfrmController' 'に割り当てましたか?ここには、[例](https://msdn.microsoft.com/en-us/library/system.windows.forms.containercontrol.parentform(v = vs.110).aspx?cs-save-lang = 1&cs- lang = vb#code-snippet-1) 'frmController.MasterQuestionList'をどのように宣言しますか? –
@BassemAkl:MDIがこれに収まるとは思わない。なぜなら、これは複数のフォームがそれぞれのフォームに読み込まれるのではなく、むしろ複数のフォームウィンドウが読み込まれるからだ。 –