|
■No102057 (Yuta さん) に返信 > サンプル等あれば助かります。
掲示板に直書きですが、ソースのイメージ的にはこんな感じ。
ここでは子画面をモードレス(Show)にしていますが、 モーダル(ShowDialog)でも基本方針は同じです。
イベントを WithEvents で受ける代わりに、AddHandler で割り当てても良いでしょう。
'子画面 Public NotInheritable Class ChildForm Inherits Form Public Event StartButtonClicked As EventHandler Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click RaiseEvent StartButtonClicked(Me, EventArgs.Empty) End Sub End Class
'親画面 Public Class Form1 Inherits Form Private beginTime As Date? Private WithEvents childForm As ChildForm Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Button1.Enabled = False childForm = New ChildForm() childForm.Show(Me) End Sub Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick Text = (Now - beginTime)?.ToString() End Sub Private Sub childForm_StartButtonClicked(sender As Object, e As EventArgs) Handles childForm.StartButtonClicked beginTime = Now Timer1.Start() End Sub Private Sub childForm_FormClosed(sender As Object, e As FormClosedEventArgs) Handles childForm.FormClosed Timer1.Stop() childForm = Nothing Button1.Enabled = True End Sub End Class
イベントで通知する以外の別案としては、 MethodInvoker や Action といったコールバック用の Delegate インスタンスを 子画面のコンストラクタに渡して、子画面側でそれを実行するという手もあるかも。 これなら、「Sub() Timer1.Start()」などのラムダ式でも渡せるので、 WithEvents 変数を用意する必要がなくなります。
|