好的,我正在与视觉工作室合作,而且我遇到了一些障碍。基本情况是我有一堆按钮和计时器相互对应。例如,当单击button1时,Timer1应该启动。
目前,我使用一种方法来处理所有按钮点击。它标识CR(1,2,3等等)并构造一个字符串,用于与其一起使用的正确Timer的名称dim timername as string = "timer" & cr.ToString
。然后,当我使用Me.Controls(cr).Enabled = True
时,它返回一个空指针错误。
我知道这个问题与定时器的识别,建议有关吗?
答案 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