Hallo,
ich habe in meiner Windows Form eine TabControl, die zu Beginn noch leer ist und während der Runtime gefüllt werden soll.
Soweit so gut...Ich füge also meiner Form zuerst die TabPages hinzu, mit folgendem Sub:
Die Schleife ist da um zu prüfen, ob die TabPage bereits vorhanden ist, da nie True zurückgegeben hat..nunja andere Baustelle.
Nun habe ich eine andere Funktion die den Rest der Controls zur jeweiligen TabPage hinzufügen soll.
Dies versuche ich folgendermaßen zu bewerkstelligen:
Dabei ist "newCont" eine PictureBox und "newLab" ein Label.
"n" ist einfach nur ein String der den Namen der TabPage enthält.
Beim Versuch die Controls hinzuzufügen bekomme ich aber die Meldung dass tabCtrl.TabPages(n) Nothing ist.
Bei meiner vorherigen Methode die TabPages und die zugehörigen Controls hinzuzufügen hatte ich keine Probleme(folgender Sub in Schleife aufgerufen):
Verstehe wirklich nicht was das Problem ist..und hoffe mein Beitrag ist nicht zu unübersichtlich.
Gruß
nicerdicer
ich habe in meiner Windows Form eine TabControl, die zu Beginn noch leer ist und während der Runtime gefüllt werden soll.
Soweit so gut...Ich füge also meiner Form zuerst die TabPages hinzu, mit folgendem Sub:
VB.NET-Quellcode
- Private Sub AddTabs()
- Dim add As Boolean = True
- Dim tb As New TabPage()
- Try
- For Each s As String In ds.tabPages
- tb.Name = s
- tb.Text = s
- tb.AllowDrop = True
- For Each t As TabPage In tabCtrl.TabPages
- If t.Name = Text Then
- add = False
- End If
- Next
- If add = True Then
- AddHandler tb.DragEnter, AddressOf tb_DragEnter
- AddHandler tb.DragDrop, AddressOf tb_DragDrop
- tabCtrl.TabPages.Add(tb)
- tabCtrl.TabPages(tb.Text).BackColor = Color.White
- End If
- Next
- Catch ex As Exception
- MessageBox.Show(ex.Message)
- End Try
- End Sub
Die Schleife ist da um zu prüfen, ob die TabPage bereits vorhanden ist, da nie True zurückgegeben hat..nunja andere Baustelle.
Nun habe ich eine andere Funktion die den Rest der Controls zur jeweiligen TabPage hinzufügen soll.
Dies versuche ich folgendermaßen zu bewerkstelligen:
VB.NET-Quellcode
- Private Sub AddShortcuts()
- Try
- Dim newCont As New PictureBox()
- Dim newLab As New Label()
- Dim fs As FileStream
- Dim count As Integer = 0
- Dim startX As Integer = 0
- Dim startY As Integer = 0
- For c = 0 To ds.tabPagesWithNames.Keys.Count - 1
- Dim n As String = ds.tabPagesWithNames.Keys(c)
- For i = 0 To ds.tabPagesWithNames(ds.tabPagesWithNames.Keys(c)).Count - 1
- Dim currthumb As String = ds.tabPagesWithThumbs(ds.tabPagesWithNames.Keys(c)).Item(i)
- Dim currname As String = ds.tabPagesWithNames(ds.tabPagesWithNames.Keys(c)).Item(i)
- Dim currlink As String = ds.tabPagesWithLinks(ds.tabPagesWithNames.Keys(c)).Item(i)
- If currthumb = "" Then
- fs = New FileStream(path, FileMode.Open, FileAccess.Read)
- Else
- fs = New FileStream(currthumb, FileMode.Open, FileAccess.Read)
- End If
- With newCont
- .Name = n
- .Tag = currlink
- .AccessibleName = currname
- .BackgroundImage = Image.FromStream(fs)
- .BackgroundImageLayout = ImageLayout.Stretch
- .Size = New Point(60, 60)
- .BorderStyle = BorderStyle.Fixed3D
- .Location = New Point(startX, startY + 15)
- End With
- With newLab
- .Tag = currlink
- .Location = New Point(startX, startY)
- .Text = currname
- .Size = New Point(60, 20)
- End With
- AddHandler newCont.MouseClick, AddressOf newCont_MouseClick
- AddHandler newCont.MouseHover, AddressOf newCont_MouseHover
- AddHandler newCont.MouseLeave, AddressOf newCont_MouseLeave
- '############Hier tritt der Fehler auf############
- tabCtrl.TabPages(n).Controls.Add(newCont)
- tabCtrl.TabPages(n).Controls.Add(newLab)
- If startX < 240 Then
- startX = startX + 60
- Else
- startX = 0
- startY = startY + 75
- End If
- If startY >= Me.Height - 80 Then
- Me.Height = Me.Height + 75
- tabCtrl.Height = tabCtrl.Height + 75
- End If
- count += 1
- Next
- Next
- Catch ex As Exception
- MsgBox(ex.Message)
- End Try
- End Sub
Dabei ist "newCont" eine PictureBox und "newLab" ein Label.
"n" ist einfach nur ein String der den Namen der TabPage enthält.
Beim Versuch die Controls hinzuzufügen bekomme ich aber die Meldung dass tabCtrl.TabPages(n) Nothing ist.
Bei meiner vorherigen Methode die TabPages und die zugehörigen Controls hinzuzufügen hatte ich keine Probleme(folgender Sub in Schleife aufgerufen):
VB.NET-Quellcode
- Public Sub AddControls(ByVal text As String, ByVal thumbs As List(Of String), ByVal links As List(Of String), ByVal name As List(Of String))
- 'Add TabControls
- Dim count As Integer = 0
- Dim startX As Integer = 0
- Dim startY As Integer = 0
- Dim add As Boolean = True
- Dim tb As New TabPage()
- tb.Name = text
- tb.Text = text
- tb.AllowDrop = True
- For Each t As TabPage In tabCtrl.TabPages
- If t.Name = text Then
- add = False
- End If
- Next
- If add = True Then
- AddHandler tb.DragEnter, AddressOf tb_DragEnter
- AddHandler tb.DragDrop, AddressOf tb_DragDrop
- tabCtrl.TabPages.Add(tb)
- tabCtrl.TabPages(text).BackColor = Color.White
- End If
- For Each s As String In thumbs
- Dim newCont As New PictureBox()
- Dim newLab As New Label()
- Dim fs As FileStream
- If s = "" Then
- fs = New FileStream(path, FileMode.Open, FileAccess.Read)
- Else
- fs = New FileStream(s, FileMode.Open, FileAccess.Read)
- End If
- With newCont
- .Name = text
- .Tag = links(count)
- .AccessibleName = name(count)
- .BackgroundImage = Image.FromStream(fs)
- .BackgroundImageLayout = ImageLayout.Stretch
- .Size = New Point(60, 60)
- .BorderStyle = BorderStyle.Fixed3D
- .Location = New Point(startX, startY + 15)
- End With
- With newLab
- .Tag = links(count)
- .Location = New Point(startX, startY)
- .Text = name(count)
- .Size = New Point(60, 20)
- End With
- AddHandler newCont.MouseClick, AddressOf newCont_MouseClick
- AddHandler newCont.MouseHover, AddressOf newCont_MouseHover
- AddHandler newCont.MouseLeave, AddressOf newCont_MouseLeave
- ''###########Hier tritt kein Fehler auf##############
- tabCtrl.TabPages(text).Controls.Add(newCont)
- tabCtrl.TabPages(text).Controls.Add(newLab)
- If startX < 240 Then
- startX = startX + 60
- Else
- startX = 0
- startY = startY + 75
- End If
- If startY >= Me.Height - 80 Then
- Me.Height = Me.Height + 75
- tabCtrl.Height = tabCtrl.Height + 75
- End If
- count += 1
- Next
- End Sub
Verstehe wirklich nicht was das Problem ist..und hoffe mein Beitrag ist nicht zu unübersichtlich.
Gruß
nicerdicer