none
Neue ListBox in neuer Registerkarte estellen RRS feed

  • Frage

  • Hallo alle zusammen,

    ich komme mal wieder nicht weiter.
    In meinem Programm habe ich unter anderem ein TabPageControl das bislang mit einem TabPage auskam. Nun bin ich an einem Punkt angelangt, an dem ich eine zweite Registerkarte erzeuge was auch klappt.
    In dieser zweiten Registerkarte möchte ich eine ListBox haben, in die ich dann später meine Einträge reinpacke.

    Wie ich die neue Registerkarte erstelle und später auch wieder verschwinden lasse weiß ich.
    Grundsätzlich bekomme ich es auch hin, eine ListBox während der Laufzeit zu erzeugen.
    Zum Erfolg fehlt mir nun die Kombination aus beidem.
    Der Ereignis wird als Button_ClickEvent ausgelöst.

    Folgenden Code habe ich:

    Private Sub Button11_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button11.Click
           
            Try
                TabControl1.TabPages.Insert(1, "Liste der Anhänge")
                ' Erzeugt eine neue ListBox-INstanz
                Dim listBox1 As New ListBox()
                ' Größe und Position der Listbox
                listBox1.Size = New System.Drawing.Size(200, 100)
                listBox1.Location = New System.Drawing.Point(10, 10)
                'listBox1.Dock = DockStyle.Fill '//Füllt das komplette Register aus
                'Add the ListBox to the form.
                Me.Controls.Add(listBox1)
                Form2.Show()
            Catch ex As Exception
    
            End Try
           
        End Sub
    Wenn ich nun meinen Button klicke, habe ich nur die neue Registerkarte mit der entsprechenden Beschriftung. Die ListBox, die in einer Probeanwendung einwandfrei erzeugt wird, taucht nicht auf.

    Was mache ich verkehrt?

    Vielen Dank für eure Tipps.

    Stefan



    Liebe Grüße Stefan
    Sonntag, 7. März 2010 22:31

Antworten

  • Hallo Stefan,

    die ListBox musst Du zur TabPage hinzufügen statt zum Formular, also TabControl1.TabPages(1).Controls.Add(listBox1).

    Wenn Du die Listbox sowieso auf DockStyle.Fill setzt macht es außerdme keinen Sinn, Size und Location zu setzen (füllt ja sowieso alles aus).

    Grüße,
    Mathias


    Mathias Raacke - freiberuflicher .NET Trainer und Berater - Blog http://www.outofcoffeeexception.de Twitter oocx
    Sonntag, 7. März 2010 22:58
  • Hallo Stefan,

    Du möchtest also eine neue TabPage erzeugen, in der TabPage eine ListBox, und zu der einen Eintrag hinzufügen. Das geht z.B. so:

    ' neue Tab Seite erzeugen
    Dim page = New TabPage()
    page.Text = "Neue Seite"
    TabControl1.TabPages.Add(page)
    
    ' Listbox zur neuen Seite hinzufügen
    Dim lbx = New ListBox()
    page.Controls.Add(lbx)
    
    ' Eintrag in ListBox eintragen
    lbx.Items.Add("Hallo Welt")
    

    Aus Deinem Beispiel vermute ich, dass Du den Eintrag allerdings erst später zur ListBox hinzufügen möchtest. Dafür könntest Du Dir entweder die ListBox nach dem hinzufügen zur TabControl in einem Feld Deiner Form-Klasse merken, oder Du machst folgendes:

    ' Das erste Steuerelement der zweiten TabPage als ListBox auslesen
    Dim lbx As ListBox = TabControl1.TabPages(1).Controls(0)
    
    lbx.Items.Add("Hallo Welt")
    


    Grüße,
    Mathias


    Mathias Raacke - freiberuflicher .NET Trainer und Berater - Blog http://www.outofcoffeeexception.de Twitter oocx
    • Als Antwort markiert Giftzwockel Dienstag, 9. März 2010 20:21
    Dienstag, 9. März 2010 11:50

Alle Antworten

  • Hallo Stefan,

    die ListBox musst Du zur TabPage hinzufügen statt zum Formular, also TabControl1.TabPages(1).Controls.Add(listBox1).

    Wenn Du die Listbox sowieso auf DockStyle.Fill setzt macht es außerdme keinen Sinn, Size und Location zu setzen (füllt ja sowieso alles aus).

    Grüße,
    Mathias


    Mathias Raacke - freiberuflicher .NET Trainer und Berater - Blog http://www.outofcoffeeexception.de Twitter oocx
    Sonntag, 7. März 2010 22:58
  • Hallo Mathias,

    vielen Dank.
    Vom Grundsatz her war mir das klar, nur das WIE.
    Jedenfalls klappt es so wie es sollte und nun kann ich auch den Kram mit Location und Size rausschmeißen. Da die Form skalierbar ist, macht DockStyle.Fill einfach mehr sinn.

    Liebe Grüße
    Stefan
    Liebe Grüße Stefan
    Montag, 8. März 2010 16:51
  • Hallo Mathias,

    nun habe ich ein anderes Problem.
    Die listBox1 wird bei meinem Programm in Form "EMAIL" als Teil von TabControl TabPage1 erzeugt.
    Der Eintrag, der an diese ListBox1 übergeben werden soll, wird bereits in Form2 ermittelt.

    Wenn ich die Zwischenschritte via MsgBox ausgeben lasse stimmt alles. Die korrekte Datei wird also ermittelt und dargestellt. Nur bei der finalen Übergabe an die listBox1 scheitert es.

    Gebe ich:

    listBox1.Items.Add(LadeDatei)
    ein passiert wieder nichts. Es fehlt ja auch der Verweis auf die richtige Form und Element.

    Versuche ich das anzugeben und schreibe wie folgt:

    EMAIL.TabPage1.listBox1.Items.Add(LadeDatei)

    wird es auch nichts. Ich bekomme die Meldung:
    Fehler 1 "listBox1" ist kein Member von "System.Windows.Forms.TabPage". 

    Nun kenne ich zwei (und mehr) Möglichkeiten es falsch zu machen.

     

    Kannst du mir eine nennen, die richtig ist?
    Vielen Dank im Voraus.

    Stefan


    Liebe Grüße Stefan
    Dienstag, 9. März 2010 07:40
  • Hallo Stefan,

    Du möchtest also eine neue TabPage erzeugen, in der TabPage eine ListBox, und zu der einen Eintrag hinzufügen. Das geht z.B. so:

    ' neue Tab Seite erzeugen
    Dim page = New TabPage()
    page.Text = "Neue Seite"
    TabControl1.TabPages.Add(page)
    
    ' Listbox zur neuen Seite hinzufügen
    Dim lbx = New ListBox()
    page.Controls.Add(lbx)
    
    ' Eintrag in ListBox eintragen
    lbx.Items.Add("Hallo Welt")
    

    Aus Deinem Beispiel vermute ich, dass Du den Eintrag allerdings erst später zur ListBox hinzufügen möchtest. Dafür könntest Du Dir entweder die ListBox nach dem hinzufügen zur TabControl in einem Feld Deiner Form-Klasse merken, oder Du machst folgendes:

    ' Das erste Steuerelement der zweiten TabPage als ListBox auslesen
    Dim lbx As ListBox = TabControl1.TabPages(1).Controls(0)
    
    lbx.Items.Add("Hallo Welt")
    


    Grüße,
    Mathias


    Mathias Raacke - freiberuflicher .NET Trainer und Berater - Blog http://www.outofcoffeeexception.de Twitter oocx
    • Als Antwort markiert Giftzwockel Dienstag, 9. März 2010 20:21
    Dienstag, 9. März 2010 11:50
  • Hallo Mathias,

    danke, ich probier diese Herangehensweise mal, wenn ich wieder zuhause bin und an meinem Programm "bastel"

    Liebe Grüße
    Stefan
    Liebe Grüße Stefan
    Dienstag, 9. März 2010 20:23