使用VB.NET选择最近动态创建的对象

时间:2012-02-03 06:16:35

标签: vb.net stopwatch

下面是我用于使用Visual Basic创建对象的一些代码:

    For indexCounter As Integer = 1 To TotalParticipants Step 1

        participantClock = New Label
        participantClock.Size = New Size(100, 20)
        participantClock.Name = "participantClock" & indexCounter
        participantClock.Location = New Point(139, (5 + ((indexCounter - 1) * 26)))
        participantClock.BorderStyle = BorderStyle.Fixed3D
        participantClock.TextAlign = ContentAlignment.MiddleRight
        CenterPanel.Controls.Add(participantClock)

        participantStop = New Button
        participantStop.Size = New Size(58, 20)
        participantStop.Location = New Point(245, (5 + ((indexCounter - 1) * 26)))
        participantStop.BackColor = Color.Red
        participantStop.ForeColor = Color.White
        participantStop.Font = New Font(participantStop.Font, FontStyle.Bold)
        participantStop.Text = "Stop"
        CenterPanel.Controls.Add(participantStop)

        participantTimer = New Timer
        participantTimer.Start()
        participantTimer.Enabled = True
        participantTimer.Interval = 1

        participantStopwatch = New Stopwatch
        participantStopwatch.Start()
Next

我正在制作标签,按钮,计时器和秒表。 (虽然我有下沉的感觉,因为我在计算时间,所以我不需要计时器和秒表。)

我想做的是创建标签并将该标签的文本设置为秒表的值。将要创建的按钮将停止该秒表。

我遇到的问题是我不能通过名字来调用秒表,因为它还没有被创建,而且VB因此而对我产生了异议。 (毕竟它并没有真正宣布。)

所以问题就变成了,如何调用最近动态创建的控件并使用该控件分配事件。如果不可能这样做,我不介意转储表格并开始创建30个秒表(但如果可能的话,我想避免这样做。)

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

我假设您希望计时器根据秒表的值更新标签。是吗?

你可能会尝试的一件事就是这样:ha 像这样定义一个存储类:

Public Class StopwatchStorage
    Public Property Stopwatch as Stopwatch
    Public Property Label as Label
    Public Property Timer as Timer
End Class
表单顶部的

定义了一个私人列表:

Private _storage as new List(Of StopwatchStorage)
在for循环结束时

执行此操作

Dim storage As New StopwatchStorage()
storage.Label = participantClock
storage.Timer = participantTimer
storage.Stopwatch = participantStopwatch
_storage.Add(storage)
AddHandler participantTimer.Tick, AddressOf Timer_Tick

上面的代码可以让您访问tick函数中需要的三个对象。您将不得不遍历_storage列表以找到正确的“set”对象,但它应该可以工作:

Private Sub Timer_Tick(sender As Object, args As EventArgs)
    For Each storage As StopwatchStorage In _storage
        If storage.Timer Is sender Then
            storage.Label.Text = storage.Stopwatch.Elapsed
            Exit Sub
        End If
    Next
End Sub

我没有尝试编译该代码,所以我确定有一些拼写错误,但我认为这应该让您了解如何引用该对象而无需使用该对象的名称。