下面是我用于使用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个秒表(但如果可能的话,我想避免这样做。)
感谢您的帮助。
答案 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
我没有尝试编译该代码,所以我确定有一些拼写错误,但我认为这应该让您了解如何引用该对象而无需使用该对象的名称。