2010-03-07 206 views
0

我有10個標籤命名爲lbl1lbl2 ... lbl10VB.NET動態使用形式的控制

我想改變自己的正當性(使用cicle)與cicle指數

for i as integer=1 to 10 step 1 
    lbl (i) = PROPRETY 'I know this is wrong but it's what I would do... 
end for 

我使用的是解決辦法,但我在尋找一個更好的辦法..

Dim exm(10) As Label 
    exm(1)=lbl1 
    exm(2)=lbl2 
    ... 
    exm(10)=lbl10 

    for i as integer=1 to 10 step 1 
     exm (i) = PROPRETY 
    end for 
+0

你想瀏覽表單上的所有標籤嗎?或者這些10種標籤在某種面板上? – 2010-03-07 11:01:23

回答

1

M.A. Hanin的回答爲基礎,你可以簡單地這樣做:

(From l in Me.Controls _ 
Where RegEx.IsMatch(l.Name, "^lbl[0-9]+") AndAlso TypeOf l is Label 
Order By l.Name).ForEach(Function(l) SetPropertyForLabel(l)) 

Sub SetPropertyForLabel(lbl as Label) 
    ' Do some stuff ' 
    lbl.Text = lbl.Name 
End Sub 

這樣你就可以使用正則表達式過濾旅遊標籤的名稱(前提是一個你給的模式匹配在OP上)並在自定義方法上執行操作。

+1

你可以讓它更難嗎? – AMissico 2010-03-07 11:20:08

+0

謝謝,我會在面板中嵌入lbl來檢查這些lbl – Marcx 2010-03-07 11:33:46

+0

@amissico而這段代碼的難度恰恰在哪裏? – 2010-03-07 11:57:54

2

你的「解決辦法」是一個很好的辦法做到這一點。您需要在某種集合中擁有控件,以便遍歷它們。

也許你可以使用數組的初始化爲了初始化數組更清潔(更少的代碼):Object and array initializers in VB .NET

你可以去通過控件集合,做您爲您找到每個標籤的動作,但是這可能是不是你想要的 - 因爲這會讓你看到表格上的所有標籤。

1

如果標籤包含在表格或其它容器,就可以使用查詢類同此:

Dim myLabels = (From g As Label In Me.Controls Select g _ 
       Where Mid(g.Name, 1, 3) = "lbl" Order By g.Name) 

然後通過收集迭代,將你的財產。

1

你的工作實際上是推薦的技術。您可能想要使用List(Of Label)和For ... Each語句。這將消除硬編碼和便於維護。