Labels möglichst sauber verwenden / erst ab Label112 arbeiten

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Labels möglichst sauber verwenden / erst ab Label112 arbeiten

    Hallo zusammen, ich habe eine Form3, die 224 Label enthält; 2 Blöcke à 7 Zeilen à 16 Spalten (im Bild ist nur 1 Block zu erkennen).
    Diese beiden Blöcke möchte ich getrennt in List(of Label) ablegen, um die Labels möglichst sauber im Code zu verarbeiten. Später möchte ich den Text der Labels von links nach rechts, Zeile für Zeile, ändern. Meine Schwierigkeit ist, den rechten Block zu fassen. Wie kann ich sagen, füg alle Label ab Label112 zur Liste hinzu?

    VB.NET-Quellcode

    1. [/size][/font] 'die linken
    2. 'die linken
    3. Dim Label_links_list As New List(Of Label)
    4. For Each Lab In Me.Controls.OfType(Of Label)()
    5. Label_links_list.Add(Lab)
    6. If Label_links_list.Count = 112 Then Exit For
    7. Next
    8. Label_links_list.OrderBy(Function(s) s.Name)
    9. 'die rechten
    10. Dim Label_ueb_list As New List(Of Label)
    11. For Each La In Me.Controls.OfType(Of Label)()
    12. '???
    13. Next[size=10][font='arial,helvetica,sans-serif']


    Das zweite Problem ist, dass trotz Sortierung die Labels völlig beknackt sortiert sind. Was ist das Problem?

    Bilder
    • Screenshot 2020-10-30 134202 - Kopie.png

      12,26 kB, 771×215, 78 mal angesehen
    • Screenshot 2020-10-30 134102 - Kopie.png

      58,82 kB, 545×419, 85 mal angesehen

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

    Bartosz schrieb:

    224 Label enthält; ... um die Labels möglichst sauber im Code zu verarbeiten
    du machst Witze, odr?

    Bartosz schrieb:

    Das zweite Problem ist, dass trotz Sortierung die Labels völlig beknackt sortiert sind. Was ist das Problem?
    Vermutlich hast du die Funktion von OrderBy() falsch verstanden hast.
    .OrderBy gibt die Labels in sortierter Reihenfolge zurück. Probierma dies:

    VB.NET-Quellcode

    1. dim sorteds = Label_links_list.OrderBy(Function(s) s.Name)
    2. for each lb in sorteds
    3. messagebox.Show(lb.Name)
    4. next
    sorteds ist doch sortiert, wie gewünscht, oder?
    Hallo @ErfinderDesRades !
    du machst Witze, oder?
    Nein. Kannst du mir etwas anderes nennen?

    Das Problem mit der falschen Sortierung (also das besehene "alles richtig außer mittendrin die paar") lag daran, dass ich die Labels vorhin falsch auf's Formular gezogen habe. Das war zuerst nicht ersichtlich, weil die Labels richtig hießen (wie sie sollten). Wahrscheinlich hat Visual Studio etwas durcheinander gekriegt. Habe alles Labels gelöscht und neu auf's Form gezogen. Jetzt gehts! :)

    Jetzt fehlt nur noch, dass ich die Labels 113 bis 224 in eine List(of Label) bekomme.
    An die Neulinge: Nutzt Option Strict On und Option Infer Off. Dadurch kommt ihr mit Datentypumwandlungen nicht durcheinander und der Code verbessert sich um Einiges! Solche Fehler à la Dim Beispiel As Integer = "123" können nicht mehr passieren.
    Schnellschüsse:
    Nur Labels ab Pos X: Dim LabelsAbPosition112 = DeineLabelList.Skip(111) 'oder 112?
    Statt unzählige Labels ein schön designtes DGV.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Bartosz schrieb:

    Kannst du mir etwas anderes nennen?
    DataGridView, TableLayoutPanel, UserControl mit TableLayoutPanel usw., da sind alle Text-darstellenden Controls in Reih und Glied angeordnet.
    Packst Du Deine Labels in zwei Panels, kannst Du die Panels einzeln durchlaufen.
    Was soll denn das ganze darstellen?
    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!
    @RodFromGermany , @VaporiZed ich danke euch beiden!
    DataGridView, TableLayoutPanel, UserControl mit TableLayoutPanel
    Damit muss ich mich beschäftigen. Mit so vielen Labels zu arbeiten ist ne absolute Katastrophe :/

    Problem 1:
    Man darf im Designer ganze Label-Zeilen nicht kopieren und einfügen. Sie sind sonst falsch bennant. Also jedes Label einzeln einfügen.
    Problem 2:
    Der Code ist nicht wirklich schön. Trotz Vaporizeds .Skip(...)-Vorschlag braucht es noch viel mehr, denn...
    Problem 3:

    Die Labels werden falschherum in die List übernommen. Beginnend bei 224 und fallend :/

    Wie ich es jetzt gemacht habe: Es gibt eine Liste, die alle Labels enthält (224 und fallend). Von der wird in die Listen namens Links und Rechts kopiert, mithilfe von
    .Skip(...). Dann sicherheitshalber sortiert (auch wenn ich die Labels ja jetzt richtig platziert habe).
    Der angezeigte Text eines jeden Labels ist dann

    VB.NET-Quellcode

    1. For i As Integer = 0 To testArray.Length - 2 Step 1
    2. If Convert.ToByte(testArray(i), 16) < 32 Then
    3. ueb(i) = 46 'Punkt draus machen
    4. Else
    5. ueb(i) = Convert.ToByte(testArray(i), 16)
    6. End If
    7. uebersetzt(i) = Chr(ueb(i))
    8. LabelLinksNeu((LabelLinksNeu.Count - 1) - i).Text = testArray(i)
    9. Label_rechts_List(i).Text = uebersetzt(i)
    10. Next
    , also eimal den Index von hinten und von vorn.
    Lange Rede, kurzer Sinn. Ich muss mir eure Vorschläge angucken. Ich wusste auch, dass es besser gehen muss, ich wusste jedoch nicht, dass das so eine Katastrophe wird.
    8o

    Das wird ein Hex-Editor.

    An die Neulinge: Nutzt Option Strict On und Option Infer Off. Dadurch kommt ihr mit Datentypumwandlungen nicht durcheinander und der Code verbessert sich um Einiges! Solche Fehler à la Dim Beispiel As Integer = "123" können nicht mehr passieren.

    Bartosz schrieb:

    Das wird ein Hex-Editor.
    OHa.
    Da würde ich mit nem ganz anderen Konzept rangehen:
    Mach Dir eine von RichTextBox abgeleitetes Edit-Control, in dem Du die Blöcke ausgibst und per Doppelklick oder so aus dem Anzeige- in den Edit-Modus schaltest.
    ====
    Die RichTextBox bleibt .ReadOnly = True. Anhand der Klick-Position erkennst Du das zugehöribe Byte und zeichnest darüber eine Edit-TextBox mit dem aktuellen Inhalt, der nach dem Editieren in den Speicher übernommen und angezeigt wird.
    Sieh Dir mal dies hier an:
    HEX-Dump Control

    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!

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