【问题标题】:Find Timers by Name按名称查找计时器
【发布时间】:2014-07-09 06:25:47
【问题描述】:

好的,我正在与 Visual Studio 合作,但遇到了一些障碍。基本情况是我有一堆相互对应的按钮和定时器。例如当 button1 被点击时 Timer1 应该启动。

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

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

【问题讨论】:

    标签: vb.net timer


    【解决方案1】:

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

    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 之类的东西)。

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

    【讨论】:

      【解决方案2】:

      计时器是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
      

      【讨论】:

        猜你喜欢
        • 2015-04-29
        • 1970-01-01
        • 1970-01-01
        • 2012-04-28
        • 2011-09-14
        • 1970-01-01
        • 2021-05-17
        • 2018-04-15
        • 1970-01-01
        相关资源
        最近更新 更多