2012-11-19 13 views
4

我在VB中有很多標籤,我使用With語句來設置它們的屬性。在VB中的With語句中有多個對象?

問題 有什麼辦法,我可以做一些這樣的:

With lblA, lblB, lblC 
    .fontColor = color.Red 
End With 

這是可能的,還是我不得不手動做With聲明爲他們每個人?

回答

4

我會將這些類型的項目保留在列表中,然後爲它們上的每個循環應用一個,假設它們都是相同類型(或至少是基本類型)。假設你正在使用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) 
+0

的最佳解決方案! – DemCodeLines

0

這是我最後做的方式:

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 

還有其他方法可以做到這一點,但我發現這很有用。

+0

比較這與vs For Each的可讀性。作爲一般的經驗法則,如果不能寫出For Each(例如,非線性遍歷),那麼只有定期/索引循環纔有意義。使用Resharper時,它可以在兩者之間立即轉換。 – Neolisk

5

有一個更短,更易讀版本的解決方案:

For Each lbl As Label In {lblA, lblB, lblC} 
    With lbl 
    '... 
    End With 
Next