2012-02-03 51 views
1

下面是一些代碼,我使用的創建與Visual Basic對象:選擇最近動態創建的對象與VB.NET

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會爲我調用一個hissy fit。 (畢竟它沒有被真正聲明)。

所以問題就變成了,你如何調用最近動態創建的控件並使用該控件分配事件。如果無法做到,我不介意傾銷表單,而是開始創建30個秒錶(如果可能,我想避免這種情況)。

感謝您的任何幫助。

+0

除了停止秒錶外,按鈕還能做什麼?它也會停止計時器嗎? – 2012-02-03 14:33:27

+0

不可以。動態按鈕只會停止與之相關的秒錶。一個單獨的事件將處理停止計時器。我甚至想知道是否每個秒錶的單獨計時器都是必要的,因爲它只是更新顯示經過時間的標籤而已。 – 2012-02-03 16:58:50

回答

1

我假設你想要的計時器更新基於該秒錶的價值標籤。是對的嗎?

一件事,你可以嘗試這是一個有點哈克是這樣的:在你的窗體頂部

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 

上述代碼將使您可以訪問您在滴答功能中所需的三個對象。你將不得不遍歷_storage列表來查找對象的「設置」的權力,但它應該工作:

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 

我沒有嘗試編譯代碼,所以我敢肯定,有幾個錯別字,但我認爲這應該讓你知道如何引用對象而不需要使用對象的名字。

+0

遇到你的代碼有一個小問題。 ''Tag'不是'System.Diagnostics.Stopwatch'的成員。' – 2012-02-03 08:21:09

+0

哦,是的,Stopwatch對象不是從控制庫派生的。我的錯。我修改了帖子。試試像現在提到的那樣。 – EverPresent 2012-02-03 21:36:48

+0

好的EverPresent。這個改變肯定是有效的。我只需要知道如何連接按鈕來停止特定的計時器。併發送命令停止所有定時器。 – 2012-02-03 22:12:20