2016-06-07 110 views
0

我已經詢問question如何通過名稱控制循環。如何使用Me.Controls(「ControlName」)將控件捕獲到面板中

無論如何,我繼續搜索,我發現this question與使用Me.Controls答案。

我意識到,我使用Me.Controls的嘗試失敗,因爲控件(我試圖環)分別位於成Panel

如果我將它們從面板中取出,我可以使用Me.Controls("ControlName")來捕捉每個控件,但面板非常有用,我不會錯過它。

有沒有辦法使用Me.Controls("ControlName")來訪問面板中的控件?

編輯(我仍然無法使其作品)
這是我的代碼 TLP_PhasesTableLayoutPanel
DS_All是包含一些DataTables
每個DataTable有從1到4 DataSetrows

For r As Integer = 0 To DS_All.Tables(TblName).Rows.Count - 1 
    With Me.TLP_Phases 
     Dim CBox_Phase As CheckBox = _ 
      CType(.Controls("CBox_Phase" & (r + 1).ToString), CheckBox) 
     'Here CBox_Phase result Nothing 
     CBox_Phase.Text = _ 
      DS_All.Tables(TblName).Rows(r).Field(Of String)("Phase") 
     CBox_Phase.Visible = True 

     Dim TBox_BasePh As TextBox = _ 
      CType(.Controls("TBox_BasePh" & (r + 1).ToString), TextBox) 
     TBox_BasePh.Text = _ 
      "€ " & DS_All.Tables(TblName).Rows(r)(ProcVal).ToString 
     TBox_BasePh.Visible = True 

     If DS_All.Tables(TblName).Rows(r).Field(Of String)("Phase").Contains("instruct") Then 
      Dim TBox_MaxRedPh As TextBox = _ 
       CType(.Controls("TBox_MaxRedPh" & (r + 1).ToString), TextBox) 
      TBox_MaxRedPh.Text = String.Format("{0:P}", -0.7) 
      TBox_MaxRedPh.Visible = True 
      Dim TBox_MaxUpPh As TextBox = _ 
       CType(.Controls("TBox_MaxUpPh" & (r + 1).ToString), TextBox) 
      TBox_MaxUpPh.Text = String.Format("{0:P}", 1) 
      TBox_MaxUpPh.Visible = True 
     Else 
      Dim TBox_MaxRedPh As TextBox = _ 
       CType(.Controls("TBox_MaxRedPh" & (r + 1).ToString), TextBox) 
      TBox_MaxRedPh.Text = String.Format("{0:P}", -0.5) 
      TBox_MaxRedPh.Visible = True 
      Dim TBox_MaxUpPh As TextBox = _ 
       CType(.Controls("TBox_MaxUpPh" & (r + 1).ToString), TextBox) 
      TBox_MaxUpPh.Text = String.Format("{0:P}", 0.8) 
      TBox_MaxUpPh.Visible = True 
     End If 
     Dim TBox_SelVarPh As TextBox = _ 
      CType(.Controls("TBox_SelVarPh" & (r + 1).ToString), TextBox) 
     TBox_SelVarPh.Visible = True 
     Dim TBox_ValPh As TextBox = _ 
      CType(.Controls("TBox_ValPh" & (r + 1).ToString), TextBox) 
     TBox_ValPh.Visible = True 
    End With 
Next 

我得到NullReferenceException因爲變量containsig控件是Nothing。
我錯在哪裏?

+5

'thePanel.Controls(...)'每個容器控件都有自己的集合 – Plutonix

+0

@Plutonix你可以相信我:當我嘗試它時,它不起作用!也許我犯了一個錯字。真的很感謝;) – genespos

+1

@genespos:試過*什麼*?沒有工作*如何*? 「我做了一件事,一件事情不對」並不是對問題的描述。 – David

回答

1

使用其屬性Controls來遍歷面板中的控件。

如果您需要動態地得到您的面板則爲此,首先:

Dim myPanel = Me.Controls("yourPanelName") 

For Each ctr In myPanel.Controls 
    [do something] 
Next 

希望有所幫助。如果有的話發佈你的代碼。

+0

感謝您的回答,但這不是我所需要的。在我編輯的問題中看到我的代碼(不工作)。 – genespos

+0

再次感謝,但我解決了 – genespos

相關問題