我在VB中有很多標籤,我使用With
語句來設置它們的屬性。在VB中的With語句中有多個對象?
問題 有什麼辦法,我可以做一些這樣的:
With lblA, lblB, lblC
.fontColor = color.Red
End With
這是可能的,還是我不得不手動做With
聲明爲他們每個人?
我在VB中有很多標籤,我使用With
語句來設置它們的屬性。在VB中的With語句中有多個對象?
問題 有什麼辦法,我可以做一些這樣的:
With lblA, lblB, lblC
.fontColor = color.Red
End With
這是可能的,還是我不得不手動做With
聲明爲他們每個人?
我會將這些類型的項目保留在列表中,然後爲它們上的每個循環應用一個,假設它們都是相同類型(或至少是基本類型)。假設你正在使用label
類型的控件,這將是一個解決方案。請注意,我已經修改.fontColor
到.ForeColor
所以,這個例子與標籤類的工作:
Dim lblList as new List(of Label) ({lblA, lblB, lblC})
lblList.ForEach(sub(x) x.Fore Color = color.red)
既然你已經發布您的解決方案,你可以仍然以下,以避免您所做的數組在迭代循環(這就是爲什麼我這樣做,因爲列表)沒有考慮到數組大小或任何東西:
lblList.ForEach(Sub(x)
With x
.BackColor = Color.Black
.Dock = DockStyle.Top
.TextAlign = ContentAlignment.MiddleCenter
End With
End Sub)
這是我最後做的方式:
Dim arrayMe As Label() = {lblA, lblB, lblC}
For count = 0 To arrayMe.Length - 1 Step 1
With arrayMe(count)
.BackColor = Color.Black
.Dock = DockStyle.Top
.TextAlign = ContentAlignment.MiddleCenter
End With
Next
還有其他方法可以做到這一點,但我發現這很有用。
比較這與vs For Each的可讀性。作爲一般的經驗法則,如果不能寫出For Each(例如,非線性遍歷),那麼只有定期/索引循環纔有意義。使用Resharper時,它可以在兩者之間立即轉換。 – Neolisk
有一個更短,更易讀版本的解決方案:
For Each lbl As Label In {lblA, lblB, lblC}
With lbl
'...
End With
Next
的最佳解決方案! – DemCodeLines