【问题标题】:Create timers dynamically and add unique names VB.net动态创建计时器并添加唯一名称 VB.net
【发布时间】:2016-07-10 22:09:29
【问题描述】:

好的, 我知道如何创建按钮并给它们每个唯一的名称来访问它们

我是这样做的

 Dim btnName As String
    Dim x As Short

    For i As Short = 1 To 3
        btnName = "button" & CStr(i)


        x += 3
        Dim button1 As New Button


        button1.Name = btnName
        Me.Controls.Add(button1)
        button1.Location = New Point(10, x * 10)
        button1.Text = "Hello" & i

    Next

当我尝试创建一个计时器时,我无法像上面用按钮给它起一个名字

        btnName = "button" & CStr(i)
        button1.Name = btnName

所以我不知道如何访问它们和/或激活它们。 我想创建三个计时器,并将它们命名为“timer1”、“timer2”、“timer3”

我如何做到这一点?

【问题讨论】:

  • 定时器是一个组件而不是一个控件。 Dim t1 As New System.Windows.Forms.Timer 怎么不做你需要的?
  • @Plutonix 没有名称属性,除非您转到设计器窗口。我“认为”这就是问题所在。
  • 小心创建动态计时器。当表单关闭时,垃圾收集器不会知道它们,因此请确保自己处理它们。
  • 对,但只要你有 3 个唯一的引用,名称有什么关系? @LarsTech
  • @Plutonix 它没有,但我认为 OP 对无法使用 Name 属性感到震惊。我的猜测。

标签: vb.net


【解决方案1】:

'这是一个表单代码,在按钮点击时启动计时器

  Public Class Form1
     Dim t1 As Timer
     Dim t2 As Timer
     Dim t3 As Timer

    Private Sub btnT1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnT1.Click
       'on btn click start timer1
        t1 = New Timer        
        t1.Tag = DateTime.Now
        AddHandler t1.Tick, AddressOf MyTickHandler
        t1.Start()
    End Sub

   Private Sub btnT2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnT2.Click
        'on btn click start timer2
        t2 = New Timer        
        t2.Tag = DateTime.Now
        AddHandler t2.Tick, AddressOf MyTickHandler
        t2.Start()
    End Sub

  Private Sub btnT2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnT3.Click
        'on btn click start timer3
        t3 = New Timer        
        t3.Tag = DateTime.Now
        AddHandler t3.Tick, AddressOf MyTickHandler
        t3.Start()
    End Sub

    Sub MyTickHandler(ByVal sender As Object, ByVal e As EventArgs)
        dim t As Timer = DirectCast(sender, Timer)
        dim timerString = "The timer started at " & t.Tag.ToString & " just ticked..."
    End Sub

       Private Sub btnStopT1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStopT1.Click

             'stop timer1
              t1.Stop()
              t1.Dispose()   
   End Sub

     Private Sub btnStopT2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStopT2.Click

             'stop timer 2
              t2.Stop()
              t2.Dispose()   
   End Sub

   Private Sub btnStopT3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStopT3.Click

             'stop timer 3
              t3.Stop()
              t3.Dispose()   
   End Sub

End Class

Timer Class

【讨论】:

  • 伙计们,问题是我如何创建三个计时器并给它们一个不同的“名称”,以便我以后可以禁用其中一些?就像,我想创建一个循环(3次循环),并且每次都应该创建一个计时器(一般是3个计时器)。我想稍后参考第一个和第二个计时器并仅禁用它们(不触及第三个计时器)。我该如何做到这一点?
  • @SebastianAhlen 我改变了我的答案。这是你想要的吗
【解决方案2】:

本教程将帮助您创建计时器对象。

教程 2:创建定时数学测验 Tutorial link

详细的第 3 步就可以解决问题。

第 3 步:添加倒数计时器 Link to step 3

这篇文章展示了如何使用 tick 事件(从 MSDN 站点复制)

Private Sub Timer1_Tick() Handles Timer1.Tick

If timeLeft > 0 Then
    ' Display the new time left
    ' by updating the Time Left label.
    timeLeft -= 1
    timeLabel.Text = timeLeft & " seconds"
Else
    ' If the user ran out of time, stop the timer, show
    ' a MessageBox, and fill in the answers.
    Timer1.Stop()
    timeLabel.Text = "Time's up!"
    MessageBox.Show("You didn't finish in time.", "Sorry!")
    sum.Value = addend1 + addend2
    startButton.Enabled = True
End If

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多