在 mdiChild 之一中启用或禁用计时器

Enabling or disabling the timer in one of the mdiChild

例如我有 frmMenufrmParentfrmChild

在我的 frmChild 上我有 tmrChild.enabled = false。我实例化了 10 frmChild,所以我的 frmParent 里面有 10 frmChild。请注意,每个 frmChild 内部都有一个名为 tmrChild 的计时器,它们都是 enabled = false.

每个frmChild表格的名称是frmChild1, frmChild2, frmChild3 .... frmChild10

我的frmMenu上有10 buttons,每个都对应frmChildenabled属性。所以,

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

我想要的是,当我在我的 frmMenu 中单击 button1 时,它将在我的 frmChild1 中启用 timer。我该怎么做?

我试过以 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

我似乎在这部分代码中遗漏了一些简单的东西

objForms.tmrChild.enabled = True

如何在上面引用 timer

我倾向于为此使用 Dictionary。不是为子表单设置单独的字段,而是为 Dictionary(Of Button, fmrChild) 设置一个字段。然后,您可以将每个 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 子句包括所有 Buttons

当然,您必须在子表单中编写 StartTimer 方法,并在其中调用 Timer 上的 Start