2016-07-18 7 views
1

たとえば、私はfrmMenu,frmParentおよびfrmChildを持っています。mdiChildのいずれかでタイマーを有効または無効にする

私のfrmChildには、tmrChild.enabled = falseがあります。私は10 frmChildをインスタンス化するので、10 frmChildが私のfrmParentの中にあります。 frmChildにはそれぞれtmrChildという名前のタイマーがあり、それらはすべてenabled = falseです。

frmChildフォームの名前がfrmChild1frmChild2frmChild3です.... frmChild10

frmMenuに私は10 buttonsを持って、それらのそれぞれは、各frmChildenabledプロパティに対応します。だから、私が欲しいもの

10 buttons on my frmMenu = 10 timer in each of my frmChild

は私frmMenuでbutton1をクリックしたときに、それは私のfrmChild1でtimerを有効にしますです。それ、どうやったら出来るの?

私は私がコード

私が参照するにはどうすればよい
objForms.tmrChild.enabled = True 

のこの部分に簡単に何かが欠けているようだ、frmChildの名前をターゲットに、この

Private Sub button1_Click(sender As Object, e As EventArgs) Handles button1.Click 
     Dim objForms As Form 
     For Each objForms In frmParent.MdiChildren 
      If objForms.Text = "frmChild1" Then 
       objForms.tmr1.enabled = True 
      End If 
     Next 
End Sub 

のようなものを試してみた

その上にtimer

+1

「Dim objForms As Form」の代わりに「Dim objForms As frmChild」を使用します。このようにして、 'Form'の一部として宣言された変数に加えて、' frmChild'の一部として宣言された変数にアクセスすることができます。 – TnTinMn

答えて

1

私はこのためにDictionaryを使用する傾向があります。子フォーム用に別々のフィールドを持つ代わりに、Dictionary(Of Button, fmrChild)のフィールドを1つだけ持ちます。その後、それぞれButton /フォームのペアをDictionaryに追加できます。 Buttonがクリックされると、対応するフォームがDictionaryから取得され、必要に応じて実行されます。

Private childFormsByButton As New Dictionary(Of Button, frmChild) 

Private Sub Buttons_Click(sender As Object, e As EventArgs) Handles Button1.Click, Button2.Click 
    Dim btn = DirectCast(sender, Button) 
    Dim frm = childFormsByButton(btn) 

    frm.StartTimer() 
End Sub 

その方法のHandles節がALL Buttonsを含むことに留意されたいです。

あなたの子フォームにそのStartTimerメソッドを書き込む必要があります。その場合はTimerStartを呼び出します。

関連する問題