2017-12-06 13 views
1

무엇을하려합니까?VB.NET 인덱싱 된 레이블이있는 TabPage를 추가하십시오.

인덱스 된 이름이있는 레이블이있는 기존 TabControl에 TabPage를 추가하려고합니다.

Private Sub BtnAddReport_Click(sender As Object, e As EventArgs) Handles BtnAddReport.Click 

    Dim rep As New OpenFileDialog 
    rep.Title = "Add Report" 
    rep.InitialDirectory = "C:\Customers" 
    rep.FileName = "" 
    rep.DefaultExt = ".html" 
    rep.Filter = "HTML Documents|*.html" 
    rep.Multiselect = False 
    If rep.ShowDialog() = DialogResult.OK Then 

     Dim newTab As TabPage = New TabPage With {.Text = Path.GetFileName(rep.FileName)} 
     TabControl2.Controls.Add(newTab) 

     Dim i As Integer 
     For i = 1 To TabControl2.TabPages.Count 
      Dim lbl As Label = New Label With {.Text = "Label" & i, .Location = New Point(3, 3)} 
      newTab.Controls.Add(lbl) 
     Next 

    End If 

End Sub 

예상되는 결과는 무엇입니까?

버튼을 클릭 할 때마다 새 탭 등

당신이 얻을 실제 결과는 무엇인가 "Label2이", "Label1을"이라는 레이블이 추가된다?

이 코드는 새로운 tabpage를 만들고 레이블을 추가하지만, 항상 Label1을 이름이고 당신이 거기에 For 루프를해야합니까 왜 1

답변

1

증가하지 않는 이유는 무엇입니까? Label 하나만 추가 하시겠습니까? TabPage을 하나 만들고 Label을 만들고 TabPageLabel을 추가 한 다음 을 TabControl에 추가해야합니다.

Dim newTab As TabPage = New TabPage With {.Text = Path.GetFileName(rep.FileName)} 
Dim lbl As Label = New Label With {.Text = "Label" & (TabControl2.TabPages.Count + 1), .Location = New Point(3, 3)} 

newTab.Controls.Add(lbl) 
TabControl2.TabPages.Add(newTab) 
+0

와우, 나는 그것을 크게 overthinking했습니다. For 루프를 제거하고 말한 것을 완벽하게 수행했습니다. 다시 감사합니다 jmcilhinney – BradBerger

+0

한 가지 더. 런타임 중에 각 레이블을 어떻게 참조합니까? For 루프를 사용해야합니까? – BradBerger

+0

각'TabPage'에 접근하기 위해'For' 또는'For Each' 루프를 사용하고,'Controls' 콜렉션을 인덱싱함으로써 현재'TabPage'를위한'Label'에 접근합니다. 또는 별도의'List (Of Label)'을 유지하고'label' 컨트롤을 추가하고 루프를 반복하십시오. – jmcilhinney