Labels in Schleife

  • VB.NET

Es gibt 18 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Labels in Schleife

    Hallo zusammen,
    nach langer Zeit bin ich auch wieder aktiv.
    ich habe folgendes Problem:
    ich möchte während der Laufzeit einige Labels befüllen.
    Die Anzahl ermittle ich über einen ListView.items.Count(Daten werden vorher in die ListView eingelesen)
    Die Labels befinden sich auf einer TabPage und haben die Namen Label0 - Label20.
    Hier nun mein Code:

    VB.NET-Quellcode

    1. Dim iCount As Integer
    2. iCount = ListView1.Items.Count
    3. Dim labelstring As String
    4. Dim lbl As New Label
    5. For i = 0 To iCount - 1
    6. labelstring = "Label" & i
    7. lbl.Name = labelstring
    8. lbl.Text = ListView1.Items.Item(i).Text
    9. MsgBox(lbl.Name & vbCrLf & lbl.Text)
    10. Next

    Die abschliessende Messagebox zeigt mir auch die richtigen Daten an, also
    Label0 - Label20 = Name und der Eintrag ist auch korrekt (Label..text)
    Leider werden die Labels auf der Tabpage nicht befüllt.
    Kann mir jemand weiterhelfen?
    Gruß
    Klaus
    dann befüll doch die Labels auf der Tabpage.
    Also das Label, was du da in deim Code befüllst, ist offensichtlich nicht auf der Tabpage.

    also iwie sowas:

    VB.NET-Quellcode

    1. 'Dim iCount As Integer 'Ranz
    2. 'iCount = ListView1.Items.Count 'Ranz
    3. 'Dim labelstring As String 'Ranz
    4. 'Dim lbl As New Label 'Ranz
    5. For i = 0 To ListView1.Items.Count - 1
    6. 'labelstring = "Label" & i 'Ranz
    7. 'lbl.Name = labelstring 'Ranz
    8. Dim lbl = HoleLabelVomTabPage()
    9. lbl.Text = ListView1.Items.Item(i).Text
    10. MsgBox(lbl.Name & vbCrLf & lbl.Text)
    11. Next
    Wie nun genau die Function HoleLabelVomTabPage()inhaltlich aussehen muss hängt ab von den Labels, die auf der Tabpage sind, und vom TabControl und überhaupt.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()

    Die Labels befinden sich eindeutig auf der Tabpage.
    Kann es vielleicht sein dass ich die Labels erst während der Laufzeit erstellen muss, da ich ja New Label deklariert habe)
    Dim lbl As New Label



    sy Deinen Code im Anhang habe ich übersehen
    werde den Vorschlag mal einarbeiten

    Rodario schrieb:

    VB.NET-Quellcode

    1. lbl.Text = ListView1.Items.Item(i).Text
    Füge danach diesen Befehl ein:

    VB.NET-Quellcode

    1. lbl.Refresh()
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    lbl.Refresh()

    funzt auch nicht... ich muß tatsächlich die Labels während der Laufzeit erstellen,
    was ja eig. auch kein Problem ist.
    Allerdings gibt da ne Hürde beim lbl.location

    VB.NET-Quellcode

    1. lbl.Location = New Point(....)

    gibt es nicht , also den new Point.
    Rod Tipp bringt nix, so oder so. Du musst die Labels vonne TabPage holen, wenn sie da drauf sind.
    Du musst keine neuen Labels erstellen, wenn die Labels bereits auf der Tabpage sind.
    Denn die neuen Labels wären dann ja andere Labels, als die auf der Tabpage - die du ja befüllen willst.

    Merke:

    Willst du die Labels vonne TabPage befüllen, dann befüll die Labels vonne TabPage - keine anderen!.

    Aber das schrieb ich ja schon in Post#2.

    Rodario schrieb:

    Habe die Labels von der tabPage auf die Form gezogen
    also sind die Labels nicht mehr auf der TabPage?
    Warum? Ist das nun besser?

    Naja, egal, dann gilt eben folgende Programmierer-Weisheit:

    Willst du die Labels vom Form befüllen, dann befüll die Labels vom Form - keine anderen!

    Du darfst keine neuen Labels erstellen, wenn die Labels bereits auf dem Form sind.
    Denn die neuen Labels wären dann ja andere Labels, als die auf dem Form - die du ja befüllen willst.

    Verstehst du das?


    Mir isses grundsätzlich egal ob ich die Label während der Laufzeit erstelle oder ob ich vorhandene befülle
    Mir eiglich auch, aber wenn du möchtest, dass es funktioniert - halte dich an bewährte und logische Programmier-Weisheiten.
    @xtt
    jup das ist richtig.
    Deswegen habe ich im nachhinein versucht die Labels zu erzeugen.

    VB.NET-Quellcode

    1. lbl.Location = New Point(......)
    2. tpUserDefiendProps.Controls.Add(lbl)

    Nur gibt's in dem Moment das "New Point" nicht, d.h. ich kann die Label nicht untereinander platzieren.
    Sie werden alle auf einem Punkt im tabPage erstellt und angezeigt wird mir nur der text des letzten Labels.
    @EDR
    Du darfst keine neuen Labels erstellen, wenn die Labels bereits auf dem Form sind.
    Denn die neuen Labels wären dann ja andere Labels, als die auf dem Form - die du ja befüllen willst.

    bin ja nicht doof ;) natürlich versteh ich das. Ich schmeisse dann natürlich die vorhandenen Labels raus.

    Mir eiglich auch, aber wenn du möchtest, dass es funktioniert - halte dich an bewährte und logische Programmier-Weisheiten.

    Für mich stellt sich dann die Frage:
    gehört es nicht zu den Programmierweisheiten ein Label während der Laufzeit z erstellen?
    ansonsten verstehe ich diese Anmerkung nicht.
    Im nachhinein ist mir der Gedanke die Labels erst bei Laufzeit zu erstellen eig. lieber als vorh. zu befüllen.... nicht mehr auf die Form als nötig
    ist doch auch n Argument.
    Ansonsten muss ich noch di e Sichtbarkeit der nicht benutzen Labels programmieren.
    wenn was dagegen spricht dann sag mir doch bitte warum er die vorh. Labels nicht befüllt, auch wenn sie auf der Formliegen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Rodario“ ()

    Rodario schrieb:

    gehört es nicht zu den Programmierweisheiten ein Label während der Laufzeit z erstellen?
    Nein - das ist (von extrem seltenen Ausnahmen abgesehen) keine Programmierweisheit, sondern das Gegenteil von Weisheit (du weißt, was ich meine? ;) ).

    So auch hier: Wenn du imstande bist, die unnützen Labels runterzuschmeissen und durch neue zu ersetzen - ja zum Kuckuck, warum bist du dann nicht imstande, sie einfach zu befüllen?

    Du hängst nun schon so lange vor diesem Problem, statt einfach mal direkt dich mit der bereits in post#2 aufgeworfenen Frage zu befassen:
    Wie erstelle ich die Methode HoleLabelVomTabPage()?

    Diese Methode ist dein Problem - ein anderes Problem hast du nicht.
    Aber solange du dich mit anderen Problemen so sehr beschäftigst, kommst du kein Millimeter weiter.
    Weil die Methode brauchst du so oder so: Ob du die Labels nun zum Befüllen holst oder zum Runterschmeissen und ersetzen - holen können musst du sie.
    die labels habe ich durch nummeriert.
    sie heissen : Label0....... bis Label20



    ich habe hierzu noch eine Frage,
    ich lese die programmierten Daten in ein anderes Programm ein(Autodesk inventor)
    Hierzu muss ich die inventor importieren (Imports Inventor)
    Das führt dazu dass ich zum Beispiel kein Application.Exit() eingeben kann, sondern Windows.Forms.Application.Exit()
    Fehlermeldung bei Application.Exit()ist:
    Fehler 1 "Exit" ist kein Member von "Inventor.Application".

    Ich habe auf meiner Form auch noch eine picture box dessen location ich code mässig steuern will.
    gebe ich aber

    VB.NET-Quellcode

    1. pbAnw1.location = new point(50, 100)

    ein, dann geht das nicht, da "new point" von Inventor geblockt wird.
    Habt ihr da nen tip für mich?

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Rodario“ ()

    Nun zur HoleLabelsVomTab()-Function: was meinst du, welcher Datentyp wäre als Return-Value-Datentyp der geeignetste?
    1. String
    2. Boolean
    3. Label
    4. Button
    5. FileInfo
    6. Point
    7. String-Array
    8. Boolean-Array
    9. Label-Array
    10. Button-Array
    11. FileInfo-Array
    12. Point-Array
    kannst auch nochmal Grundlagen: Fachbegriffe nachlesen, falls du nicht ganz sicher bist, mich richtig zu verstehen.
    Function HoleLabelsVomTab(ByVal labelName As String) As Label ?

    habe aber erst mal ein viel größeres problem.
    Meine Form wird nicht mehr geöffnet.

    Fehlermeldung lautet:

    für......frmprops.vb ist kein Editor verfügbar.Stellen Sie sicher, dass die Anwendung für den Datentyp (.vb) installiert ist.

    Un der Backup Ordner ist leer.