2012-03-26 90 views
3

我在設計表單上有幾個標籤框,它們共享命名約定lbl_#.text,其中#的範圍爲1到60.我想創建一個循環,遍歷每個lbl_#.text添加一些增量值,讓我們說這個問題的理論目的爲2的倍數。VB.NET迭代表單標籤

的東西,使得最終結果無外乎以下幾點:

lbl_1.text = "2" 
lbl_2.text = "4" 
lbl_3.text = "6" 
... 
lbl_60.text = "120" 

我不知道如何通過編碼端訪問這些商標的,我只知道如何明確提到每個標籤和分配一個值:/

回答

2

使用控件集合:

Public Class Form1 

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
     Dim i As Integer 
     For i = 1 To 3 
      Dim myLabel As Label = CType(Me.Controls("lbl_" & i), Label) 
      myLabel.Text = ...whatever value you want to put here 
     Next 
    End Sub 
End Class 
+0

這是一個可怕的實現。您可以從假定範圍的強名稱標籤中指定高限和低限。如果標籤2被重命名或丟失,您的代碼將會中斷。它不會考慮隨着時間增加的標籤。正確的方法是對每個循環使用一個循環,並遍歷[containerObjectName] .Controls.OfType(Label)()中包含的標籤對象() – Matth3w 2015-12-03 20:44:47

4

這裏有幾個選項。

  • 在這種情況下,標籤通常會有一個共同的容器,如面板或組框控件。在這種情況下:

    For Each formLabel As Label In myContainerControl.Controls.OfType(Of Label)() 
        '... 
    Next formLabel 
    

    當然,這個融合了視覺分組邏輯組,而這兩件事情並不總是一致。而且你還可以...

  • 他們都加入到一個數組(或列表(標籤)或任何其他可枚舉):

    Dim formLabels(60) As Label = {lbl_1, lbl_2, lbl_3 .... } 
    
    For Each formLabel As Label in formLabels 
        '... 
    Next formLabel 
    
  • 使用,請將.Name屬性:

    For Each formLabel As Label In Controls.Where(Function(c) c.Name.StartsWith("lbl_")) 
        '... 
    Next formLabel 
    
  • 上面的一些組合(例如,表單載入事件中的代碼以基於name屬性創建列表)。

最後一個策略是想綁定到數據源,你的標籤作爲一個DataGridView,FlowLayoutPanel的或類似的部分創造條件。然後,您可以迭代網格或面板中的行。

+0

這是一個很好的答案!非常感謝。 – 2015-08-25 06:36:18

1

如果您不知道有多少個標籤,則有一種選擇是使用Do循環。

Dim lblTarget As Label = Nothing 
    Dim intCursor As Integer = 1 
    Dim bolFirstIteration As Boolean = True 

    Do Until lblTarget Is Nothing AndAlso Not bolFirstIteration 

     If bolFirstIteration Then 

      bolFirstIteration = False 

     End If 

     lblTarget = CType(Me.Controls("lbl_" & intCursor.ToString()), Label) 

     If Not lblTarget Is Nothing Then 

      lblTarget.Text = (intCursor * 2).ToString() 

     End If 

     intCursor += 1 

    Loop