我想使用變量作爲我的子參數之一,所以我可以在我的編碼中應用DRY: Don't Repeat Yourself
。我真的不確定我怎麼說這個,因爲標題似乎與我真正的問題沒有關係。如何使用變量作爲子參數?
基本上我有這個代碼,我想轉換成子這樣我就可以把它多次
Dim counter_1 As Integer = 0
Dim counter_2 As Integer = 0
Dim num_blink As Integer
Private Sub Tmr_Recall_Tick(sender As Object, e As EventArgs) Handles Tmr_Recall_01.Tick
num_blink = ((CInt(My.Settings.num_blink) - 1) * 2)
Service_Num = "01"
Console.WriteLine(counter_1)
Console.WriteLine(num_blink)
If Lbl_Temp_01.Text = "1" Then
If counter_1 <= num_blink Then
For Each Ctrl_Panel As Panel In Me.Pnl_Service.Controls.OfType(Of Panel)()
If TypeOf Ctrl_Panel Is Panel And Ctrl_Panel.Name = "Pnl_Service_" & Service_Num Then
For Each Ctrl_Lbl In Ctrl_Panel.Controls
If TypeOf Ctrl_Lbl Is Label And Ctrl_Lbl.Name = "Lbl_Service_Current_" & Service_Num Then
If CType(Ctrl_Lbl, Label).Visible = False Then
CType(Ctrl_Lbl, Label).Visible = True
CType(Ctrl_Lbl, Label).ForeColor = Color.Black
End If
If CType(Ctrl_Lbl, Label).ForeColor = Color.Red Then
CType(Ctrl_Lbl, Label).Visible = False
End If
If CType(Ctrl_Lbl, Label).Visible = True Then
CType(Ctrl_Lbl, Label).ForeColor = Color.Red
End If
End If
If TypeOf Ctrl_Lbl Is Label And Ctrl_Lbl.Name = "Lbl_Service_Window_" & Service_Num Then
If CType(Ctrl_Lbl, Label).Visible = False Then
CType(Ctrl_Lbl, Label).Visible = True
CType(Ctrl_Lbl, Label).ForeColor = Color.Black
End If
If CType(Ctrl_Lbl, Label).ForeColor = Color.Red Then
CType(Ctrl_Lbl, Label).Visible = False
End If
If CType(Ctrl_Lbl, Label).Visible = True Then
CType(Ctrl_Lbl, Label).ForeColor = Color.Red
End If
End If
Next
End If
Next Ctrl_Panel
counter_1 += 1
Else
Lbl_Temp_01.Text = "0"
counter_1 = 0
End If
Else
For Each Ctrl_Panel As Panel In Me.Pnl_Service.Controls.OfType(Of Panel)()
If TypeOf Ctrl_Panel Is Panel And Ctrl_Panel.Name = "Pnl_Service_" & Service_Num Then
For Each Ctrl_Lbl In Ctrl_Panel.Controls
If TypeOf Ctrl_Lbl Is Label And Ctrl_Lbl.Name = "Lbl_Service_Current_" & Service_Num Then
CType(Ctrl_Lbl, Label).ForeColor = Color.Black
CType(Ctrl_Lbl, Label).Visible = True
End If
If TypeOf Ctrl_Lbl Is Label And Ctrl_Lbl.Name = "Lbl_Service_Window_" & Service_Num Then
CType(Ctrl_Lbl, Label).ForeColor = Color.Black
CType(Ctrl_Lbl, Label).Visible = True
End If
Next
End If
Next Ctrl_Panel
End If
End Sub
Private Sub Tmr_Recall_02_Tick(sender As Object, e As EventArgs) Handles Tmr_Recall_02.Tick
num_blink = ((CInt(My.Settings.num_blink) - 1) * 2)
Service_Num = "02"
Console.WriteLine(counter_2)
Console.WriteLine(num_blink)
If Lbl_Temp_02.Text = "1" Then
If counter_2 <= num_blink Then
For Each Ctrl_Panel As Panel In Me.Pnl_Service.Controls.OfType(Of Panel)()
If TypeOf Ctrl_Panel Is Panel And Ctrl_Panel.Name = "Pnl_Service_" & Service_Num Then
For Each Ctrl_Lbl In Ctrl_Panel.Controls
If TypeOf Ctrl_Lbl Is Label And Ctrl_Lbl.Name = "Lbl_Service_Current_" & Service_Num Then
If CType(Ctrl_Lbl, Label).Visible = False Then
CType(Ctrl_Lbl, Label).Visible = True
CType(Ctrl_Lbl, Label).ForeColor = Color.Black
End If
If CType(Ctrl_Lbl, Label).ForeColor = Color.Red Then
CType(Ctrl_Lbl, Label).Visible = False
End If
If CType(Ctrl_Lbl, Label).Visible = True Then
CType(Ctrl_Lbl, Label).ForeColor = Color.Red
End If
End If
If TypeOf Ctrl_Lbl Is Label And Ctrl_Lbl.Name = "Lbl_Service_Window_" & Service_Num Then
If CType(Ctrl_Lbl, Label).Visible = False Then
CType(Ctrl_Lbl, Label).Visible = True
CType(Ctrl_Lbl, Label).ForeColor = Color.Black
End If
If CType(Ctrl_Lbl, Label).ForeColor = Color.Red Then
CType(Ctrl_Lbl, Label).Visible = False
End If
If CType(Ctrl_Lbl, Label).Visible = True Then
CType(Ctrl_Lbl, Label).ForeColor = Color.Red
End If
End If
Next
End If
Next Ctrl_Panel
counter_2 += 1
Else
Lbl_Temp_02.Text = "0"
counter_2 = 0
End If
Else
For Each Ctrl_Panel As Panel In Me.Pnl_Service.Controls.OfType(Of Panel)()
If TypeOf Ctrl_Panel Is Panel And Ctrl_Panel.Name = "Pnl_Service_" & Service_Num Then
For Each Ctrl_Lbl In Ctrl_Panel.Controls
If TypeOf Ctrl_Lbl Is Label And Ctrl_Lbl.Name = "Lbl_Service_Current_" & Service_Num Then
CType(Ctrl_Lbl, Label).ForeColor = Color.Black
CType(Ctrl_Lbl, Label).Visible = True
End If
If TypeOf Ctrl_Lbl Is Label And Ctrl_Lbl.Name = "Lbl_Service_Window_" & Service_Num Then
CType(Ctrl_Lbl, Label).ForeColor = Color.Black
CType(Ctrl_Lbl, Label).Visible = True
End If
Next
End If
Next Ctrl_Panel
End If
End Sub
在該代碼中,你可以看到,我重複我的代碼很大一部分是因爲我想將其應用於我的2個定時器(實際上我使用6個定時器,甚至可能比這更多)
這就是爲什麼我覺得將它轉換爲sub更實用,而且它在這裏。
Sub recall_Service_num(Service_Num As String, Lbl_Temp As Label, counter As Integer)
num_blink = ((CInt(My.Settings.num_blink) - 1) * 2)
Console.WriteLine(counter)
Console.WriteLine(num_blink)
If Lbl_Temp.Text = "1" Then
If counter <= num_blink Then
For Each Ctrl_Panel As Panel In frmQueuing.Pnl_Service.Controls.OfType(Of Panel)()
If TypeOf Ctrl_Panel Is Panel And Ctrl_Panel.Name = "Pnl_Service_" & Service_Num Then
For Each Ctrl_Lbl In Ctrl_Panel.Controls
If TypeOf Ctrl_Lbl Is Label And Ctrl_Lbl.Name = "Lbl_Service_Current_" & Service_Num Then
If CType(Ctrl_Lbl, Label).Visible = False Then
CType(Ctrl_Lbl, Label).Visible = True
CType(Ctrl_Lbl, Label).ForeColor = Color.Black
End If
If CType(Ctrl_Lbl, Label).ForeColor = Color.Red Then
CType(Ctrl_Lbl, Label).Visible = False
End If
If CType(Ctrl_Lbl, Label).Visible = True Then
CType(Ctrl_Lbl, Label).ForeColor = Color.Red
End If
End If
If TypeOf Ctrl_Lbl Is Label And Ctrl_Lbl.Name = "Lbl_Service_Window_" & Service_Num Then
If CType(Ctrl_Lbl, Label).Visible = False Then
CType(Ctrl_Lbl, Label).Visible = True
CType(Ctrl_Lbl, Label).ForeColor = Color.Black
End If
If CType(Ctrl_Lbl, Label).ForeColor = Color.Red Then
CType(Ctrl_Lbl, Label).Visible = False
End If
If CType(Ctrl_Lbl, Label).Visible = True Then
CType(Ctrl_Lbl, Label).ForeColor = Color.Red
End If
End If
Next
End If
Next Ctrl_Panel
counter += 1
Else
Lbl_Temp.Text = "0"
counter = 0
End If
Else
For Each Ctrl_Panel As Panel In frmQueuing.Pnl_Service.Controls.OfType(Of Panel)()
If TypeOf Ctrl_Panel Is Panel And Ctrl_Panel.Name = "Pnl_Service_" & Service_Num Then
For Each Ctrl_Lbl In Ctrl_Panel.Controls
If TypeOf Ctrl_Lbl Is Label And Ctrl_Lbl.Name = "Lbl_Service_Current_" & Service_Num Then
CType(Ctrl_Lbl, Label).ForeColor = Color.Black
CType(Ctrl_Lbl, Label).Visible = True
End If
If TypeOf Ctrl_Lbl Is Label And Ctrl_Lbl.Name = "Lbl_Service_Window_" & Service_Num Then
CType(Ctrl_Lbl, Label).ForeColor = Color.Black
CType(Ctrl_Lbl, Label).Visible = True
End If
Next
End If
Next Ctrl_Panel
End If
End Sub
所以,現在我可以這樣使用它
Dim counter_1 As Integer = 0
Dim counter_2 As Integer = 0
Dim counter_3 As Integer = 0
Dim counter_4 As Integer = 0
Private Sub Tmr_Recall_Tick(sender As Object, e As EventArgs) Handles Tmr_Recall_01.Tick
recall_Service_num("01", Lbl_Temp_01, counter_1)
End Sub
Private Sub Tmr_Recall_02_Tick(sender As Object, e As EventArgs) Handles Tmr_Recall_02.Tick
recall_Service_num("02", Lbl_Temp_02, counter_2)
End Sub
Private Sub Tmr_Recall_03_Tick(sender As Object, e As EventArgs) Handles Tmr_Recall_03.Tick
recall_Service_num("03", Lbl_Temp_03, counter_3)
End Sub
Private Sub Tmr_Recall_04_Tick(sender As Object, e As EventArgs) Handles Tmr_Recall_04.Tick
recall_Service_num("04", Lbl_Temp_04, counter_4)
End Sub
我的問題是,counter_1
,counter_2
等。似乎沒有在recall_Service_num("01", Lbl_Temp_01, counter_1)
工作?任何想法,我怎麼可以添加一個變量作爲我的子之一paremeters?
那些ctypes的沒有 - 你是隻迭代面板,不需要TypeOf。然後,如果你用同樣的方式迭代標籤('...作爲Ctrl_Panel.Controls.OfType(Of Label)中的標籤'''''''''''''''''' – user3697824
你不需要閱讀所有的代碼,我已經強調了導致問題的代碼 –