按名称查找计时器

时间:2014-07-09 06:25:48

标签: vb.net timer

好的,我正在与视觉工作室合作,而且我遇到了一些障碍。基本情况是我有一堆按钮和计时器相互对应。例如,当单击button1时,Timer1应该启动。

目前,我使用一种方法来处理所有按钮点击。它标识CR(1,2,3等等)并构造一个字符串,用于与其一起使用的正确Timer的名称dim timername as string = "timer" & cr.ToString。然后,当我使用Me.Controls(cr).Enabled = True时,它返回一个空指针错误。

我知道这个问题与定时器的识别,建议有关吗?

2 个答案:

答案 0 :(得分:0)

您无法使用字符串识别控件(嗯,不容易)。试试这个。

Private Sub ButtonX_Click(sender As Object, e As EventArgs) Handles Button1.Click, Button2.Click  ' etc.
    Dim vButton = DirectCast(sender, Button)
    Select Case vButton.Name
        Case "Button1"
            Timer1.Start    ' Or stop, or whatever
        Case "Button2"
            Timer2.Start
    End Select
End Sub

您也可以使用If vButton Is Button1比较按钮对象本身,但在VB中会变得混乱(我记得必须使用GetType和类似的东西)。

但是,如果您的代码与我的示例一样简单,为什么不为每个按钮使用单独的处理程序?!!

答案 1 :(得分:0)

计时器是Component而不是Control,因此它不会位于控件集合中。在这种情况下,使用常见的按钮点击处理程序可能更好,因为它不会简化任何操作。

但是,从Object继承的所有内容(如Button)都具有Tag属性,您可以使用该属性将事物与该对象相关联。在表单加载中:

Button1.Tag = Timer1
Button2.Tag = Timer2
Button3.Tag = Timer3

然后点击事件:

Private Sub ButtonX_Click(... etc ) Handles Button1.Click, Button2.Click ...

   Dim thisBtn As Button = CType(sender, Button)
   Dim thisTmr As Timer = Ctype(thisBtn.Tag, Timer)

   thisTmr.Start
End Sub