2013-01-23 46 views
1

我的代碼代碼不檢查:VB.NET:如果在面板存在控制

Rs.Open("Select * From Notifications",Con) 
If Not Rs.EOF Then 
    For i=0 to Rs.RecordCount -1 
    Dim Label As New Label 
    With Label 
     .Name = String.Format("Label_{0}",Rs("Id").Value.ToString) 
     .Text = Rs("Notification").Value.ToString 
    End With 
    If Not Panel.Controls.Contains(Label) Then 
     Panel.Control.Add(Label) 
    End If 
    Rs.MoveNext() 
    Next 
End If 

但這總是添加控制面板時,無法正確執行以下代碼行: (If Not Panel.Controls.Contains(Label) Then)

這代碼在定時器中工作。

+0

我不明白你想要什麼 – SysDragon

+0

檢查「Id」和「通知」...........它的每個循環都會有所不同 – andy

+0

這段代碼在定時器中工作並檢查一分鐘。如果通知顯示在面板上,那麼我不想添加新的。如果不顯示通知(是新的),那麼我想添加到與新的控制標籤面板。 –

回答

3
Function CntrlExistsIn(ctrlName as String, parent as Control) as Boolean 
    Dim bResult as Boolean = False 

    For Each elem as Control In parent.Controls 
     If elem.Name = ctrlName Then 
      bResult = True 
      Exit For 
     End If 
    Next 

    Return bResult 
End Function 

上述功能是檢查Panel中是否存在控件(標籤)。

+0

謝謝SysDragon。我托盤**如果不是Panel.Controls.Contains(標籤)然後**但在控件中搜索控件名稱正在工作。非常感謝。 –

+0

通過刪除無用變量並立即返回,此代碼可以縮短近一半。 –

+1

@KonradRudolph我知道,但我曾經做過更大的功能,我更喜歡遵循最佳編程實踐。只有一個「返回」更清晰。 – SysDragon

0

還有另一種方式,以減少類似下面

If panel1.Controls.Find(Label.Name, True).Length = 0 Then 
    panel1.Control.Add(Label) 
End If 

Controls.Find(控件名稱,真/假)------ True/False是在指定控件的子控件檢查你的代碼