Labels variabel ansprechen

  • VB.NET

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

    Nanu? Am Anfang hieß es noch:

    **Daniel** schrieb:

    In meiner Form habe ich ein "TableLayoutPanel" das ich in 20 Felder unterteilt habe.
    In 10 von diesen 20 Felder habe ich Panels und darin wiederum Labels.
    Und nun werden Pictureboxen diskutiert :S ?

    Mir scheint dein Grund-Problem, dass du Daten und Oberfläche vermischst - sowas sieht zunächstmal immer einfach aus, erweist sich aber fast immer als unzureichend, bzw. nur mit groteskem Aufwand dann doch als hinreichend.

    Deshalb mal die Frage, was das eiglich werden soll - vmtl. gibts ganz andere, viel leistungsfähig- und elegant-ere Ansätze.
    Hallo ErfinderDesRades,

    ich versuche es mal in Worte zu fassen was ich vor habe.

    also wie gesagt Ausgangspunkt ist eine Form mit einen TableLayoutpanel das 20 Felder hat (4 Zeilen und 5 Spalten).
    Dies nutze ich weil es sich an die größe der Form anpasst.

    Zeile 1 und 3 haben eine Feste Höhe und Zeile 2 und 4 werden prozentual aufgeteil.

    Es gehören Datenmäßig immer 2 Felder zusammen (z.b. Zeile 1 Feld1 und Zeile 2 Feld1)
    In den "Datenzeilen" (Zeile 1 Feld 1 usw..) befindet sich ein Panel darauf dann 3 Label mit Angaben und in Zeile 2 Feld 1 ein die dazugehörige Picturebox die zu den Daten ein Bild darstellt.

    Ich hoffe du verstehst einigermaßen was ich hier mache.

    Grüße Daniel
    Also datenverarbeiterisch gesprochen willst du Datensätze anzeigen, mit je verschiedenen Eigenschaften (ist bei Datensätzen immer so, das macht einen Datensatz aus). Eine dieser Eigenschaften ist ein Image, und soll in einer Picbox gezeigt wern.

    Das ist ein bischen problematisch - wenn man 30 solche Datensätze hat, gehts schon nicht mehr auf einen Bildschirm. Günstiger ist da ein DetailView, wo man die Textuellen Werte in einer Tabelle anzeigt, und es gibt nur eine PicBox, aber eine große, die genau das Bild des ausgewählten Datensatzes immer anzeigt.

    Aber ist deine Entscheidung, ob du viele kleine Bilder willst, oder ob ein großes, das aktuell gewählte.

    Jdfs. dein Layout krankt immer an einer gewissen Platzverschwendung, denn Bilder nehmen größere Höhen ein, die der Text desselben Datensatzes vmtl. garnet benötigen würde.
    Und ein anderes Prob ist die Umsetzung, für andere Layout-Konzepte gibts sehr einfache Sachen , aber genau dieses würde man am besten mit einem DataRepeater-Control abhandeln, aber dazu muss man einiges von Datenhaltung und Databinding verstehen.
    Also bist du auf die Datarepeater-artige Darstellung festgelegt, oder käme auch der erwähnte DetailVeiw in Frage?
    Oder noch was - grad für Databinding-Noobs - eine Bilder-Galerie mit vielen Bildern, mit je Unterschriften:
    Datenverarbeitungs-Vorraussetzungen
    danke für die schnelle Antwort.

    die kleinen Bilder können bei Bedarf in einer neuer Form "gezoomt" dargestellt werden, dafür habe ich gesorgt.
    Die komplette Form wird auf einen 24 Zoll Bildschirm immer im Vollbild angezeigt von daher passt für nich der aktuelle Aufbau so.

    Mit dem das ich die Labels und Pictureboxen jetzt mit "Controls" ansprechen kann spare ich mir auf jedenfall schonmal einen Menge Code.

    Die Schleife die allerdings am Anfang läuft um alle Daten zu laden ist mir zu Langsam.

    Die Form ist halb geladen dann passiert ca 8 bis 10 Sekunden nichts und dann wird sie komplett angezeigt. Finde ich ein wenig doof da man den
    Eindruck bekommt das Programm hat sich "aufgehängt".
    ja, ok, so sehe ich zumindest glaub klarer.
    Nur mag ich da jetzt nicht groß investieren, denn mir scheint, dir fehlen viele Grundlagen, und datenhaltungsmäßig bist du imo ziemlich auffm Holzweg.

    Eine Grundlage kann ich sogar an deim Code ablesen: Du proggst noch mit Strict Off.
    Jo, das geht schoma garnet, so kann man kaum jemals verstehen, welche fundamentale Bedeutung die verschiedenen Datentypen in einer typisierten OOP-Sprache haben.
    Also hat jetzt nix mit deim "gefühlten" Problem zu tun, aber imol solltest du keine Zeile mehr hinschreiben, bevor du nicht dein VisualStudio umgestellt hast, dass es dich unterstützt bei typen-respektierender Programmierung:
    Visual Studio - Empfohlene Einstellungen
    Also Strict Off habe ich jetzt geändert.

    Das ist gehört zwar jetzt nicht hierhin, aber ich bin halt ein "ich lerne es mir selbst Hobby Programmierer im Anfangsstadium" :D

    Ich würde mich auf diesen Gebiet auch gerne weiterbilden und ei Grundlagen lernen weil sonst wird des glaube ich nix gescheites mit mir.
    Meine Frage ist nur WIE?

    -Buch?
    -Internet?
    -Weiterbildungskurs?

    Vielleicht hat ja jemand eine Idee oder Tipps hierzu.

    Danke.
    Was wirklich gutes gibts glaub garnet auffm Markt, weiß auch garnet, ob das möglich ist.
    Programmieren ist ja ein "Gesamtkunstwerk", also man muss manches wissen, bei manchem wissen, wo suchen, Fragestellungen richtig formulieren können (wichtig!), Konzipieren, Tools (insbes. VisualStudio) kennen und verwenden.

    Ich empfehle immer meinen "Lehrplan": Datenverarbeitungs-Vorraussetzungen
    Der legt Wert darauf, sich möglichst schnell in die Lage versetzen zu können, eigenständig notwendige Infos selbst zu recherchieren, und effizient zu debuggen.

    Verschiedene Medien haben da in verschiedenen Bereichen ihre Stärken.

    Ich denke aber, an den Lehrplan-Inhalten - jeden einzelnen - kommt man nicht vorbei, und wenn mans versucht, macht man sichs nur unnötig schwer.
    Hallo an Alle nochmals,

    hab jetzt mal die "Visual Studio - Empfohlene Einstellungen" umgesetzt und mein Projekt darauf hin überarbeitet. :D

    Allerdings bleiben bei mir noch ein paar Fragen offen und da ich deswegen nicht extra einen neuen Thread aufmachen wollte
    schreibe ich es hier mit rein da es ungefähr vom Thema passt.

    Also:
    Ich habe eine 1.Form die ich zur Anzeige meiner Daten nutze.
    Diese "AnzeigeForm" wird ausschließlich am Bildschirm 2 angezeigt, da diese nur dafür da ist und er sonst für nichts benutzt wird.

    "Gearbeitet" wir auf Bildschirm 1 da dieser auch dazu vollkommen ausreicht.
    Jetzt habe ich mir eine TrayIcon angelegt über das ich eine 2.Form öffne die mein Menü darstellt.
    Dieses Menü möchte ich ungerne in die Form 1 einbetten, da der 2. Bildschirm vom 1.Bildschirm ein Stückchen entfernt ist und es sonst unhandlich wird.


    Von der "MenüForm" aus möchte ich nun die ganzen Labels die für die Anzeige der Daten vorhanden sind steuern.

    Momentan löse ich das so:

    VB.NET-Quellcode

    1. Form1.Label1.Text = "Irgendetwas"


    Jetzt meine Frage:
    Ich habe irgendwo gelesen (leider weiß ich nicht mehr wo :whistling: ) das, dass "manipulieren" von Steuerelementen von einer 2.Form heraus
    auf schlechte programmierung hinweist.
    Kann ich dies auch anders lösen?

    Ich hoffe ich habe nich Einigermasen verständlich ausgedrückt, und ihr habt ein bisschen nachsicht mit mir.

    Danke
    Daniel

    **Daniel** schrieb:

    Ich habe irgendwo gelesen (leider weiß ich nicht mehr wo ) das, dass "manipulieren" von Steuerelementen von einer 2.Form heraus
    auf schlechte programmierung hinweist.
    Kann ich dies auch anders lösen?
    Möglicherweise.
    Da muss man halt viel konkreter dein Projekt kennen.
    Ich könnte mir vorstellen, dass sowas mit Databinding sogar sehr schön lösbar wäre, und man ordnet den 3 Forms bestimmte Zuständigkeiten zu:
    frmBearbeiten, frmMenu, frmAnzeige.
    Und gemeint sind damit Daten, also frmBearbeiten meint Daten bearbeiten, "Menu" meint Massen-Operationen auf den Daten, Anzeige vielleicht statistisches.

    Aber ist wie gesagt ins Blaue fabuliert, bislang weiß ich ja nur, dass bei dir Form1, Form2 und Form3 existieren.
    Danke für die schnelle Antwort.

    Ich versuch dir mal mein Projekt näher zu beschreiben.

    - Form_1 die dient zur Anzeige der Daten. (Beispiel: Form mit 5 Label drauf und läuft auf Bildschirm 2).
    - Form_2 soll zum ändern der Labelinhalte auf Form_1 zuständig sein. Diese Form wird nur bei Bedarf mit einen Klick auf das TrayIcon geöffnet.
    - Form_3 gibt es nicht, hast du nur falsch verstanden.


    Momentan läuft es so:
    • Ich starte meine EXE und lass mir die Info anzeigen.
    • Bei Änderung der Infos klicke ich einmal auf mein TrayIcon und öffne Form_2.

    VB.NET-Quellcode

    1. Form_2.Show


    • Auf der Form_2 befinden sich 5 Radiobuttons (Nummeriert von 1 - 5), ein Textfeld und ein Button.
    • Auswählen eines Radiobutton und eintippen der anzuzeigenden Info in ein Textfeld.
    • Mit einen Klick auf den Button, soll die eingetippte Info in den über Radiobutton ausgewählten Label in Form_1 angezeigt werden.

    Momentane Lösung:

    VB.NET-Quellcode

    1. Form_1.Label_1.text = TextBox1.Text



    Habe das ganze jetzt mal ein wenig vereinfach zur besseren Verständnis, stellt aber mein "Problem" 1 zu 1 da.
    Funktionieren tut das ganze ja so, aber habe ein bischen nachgelesen und so ist das nicht gut gelöst und wenn dann will ich es schon richtig lernen! 8-)
    Leider habe ich die Richtige Lösung entweder noch nicht gefunden bzw. nicht verstanden.

    Danke Daniel
    hmm, hmm - ich weiß immer noch nicht, ob dein Anwendung nu ein Chat ist oder eine Schrittmotor-Steuerung.
    Aber erkennbar ist, dass du Daten verarbeiten willst, hast aber überhaupt keine Datensätze, also Klassen, die nicht viel mehr tun, als nur die Daten zu enthalten.
    Dassis natürlich schlecht, denn Databinding meint, dass Controls an Datenklassen gebunden werden.

    Zum "richtig lernen" hab ich dir ja einen Link gepostet, im weiteren kommen da auch Tutorials vor, wie man Datenklassen anlegt, und daran bindet, und sogar form-übergreifendes Binding wird an einer (verlinkten) Stelle thematisiert.

    Naja - im Grunde immer noch ins Blaue fabuliert - inzwischen weiß ich, dass deine Forms auch Labels, Textboxen und Radiobuttons enthalten (ob du's glaubst oder nicht: das hatte ich mir eiglich schon gedacht ;) ).
    Danke nochmals für deine Antwort.


    Ich werde dann einfach nochmals mich in die Tutorials einlesen, vielleicht gehts ja in meinen Kopf rein die ganze Sache. :D

    Hab mir gedacht ich erkläre es mal so einfach wie möglich damit wir uns da am schnellsten einig sind und nicht aneinander vorbei reden.

    Grüße
    Daniel
    vlt. sagst du mir einfach auch mal, was das für ein Proggi werden soll? Chat oder Schrittmotorsteuerung - oder evtl. noch was anderes?
    Ich glaube fest daran, dass man das erklären kann.
    Worauf ich aus bin, ist eine Erklärung des Sinns des ganzen, ganz ohne Controls und Bildschirme, einfach, bei welcher alltäglichen Verrichtung das Programm den Benutzer iwie unterstützt.
    Das ist ein ganz wichtiger Schritt bei der Konzeption, dass man formuliert, wasses werden oder bezwecken soll, inne real-world.
    Hat man das verstanden, kann man es in ein Datenmodell übertragen, und so erst handhabbar machen für die Programmiersprache.

    **Daniel** schrieb:

    und nicht aneinander vorbei reden
    Ich glaube, Du machst den zweiten oder gar dritten Schritt vor dem ersten.
    Mal fix ein paar Zeilen Code hinwerfen, die iwas machen ist kein Problem, so lange die Aufgabenstellung singulär ist, d.h., so lange nur ein einziger Aspekt der globalen Aufgabenstellung abgehandelt wird. Wenn da mehr drin steckt, kommen Anfänger schnell mal aus dem Ruder.
    Probier mal diese Herangehensweise in Ergänzung zu dem, was Dir der @ErfinderDesRades über Datenmodelle gesagt hat:
    • Hände weg vom Visual Studio.
    • Schreib eine vollständige und belastbare Aufgabenstellung (vollständig und belastbar bedeutet: Wenn Du uns nach einem Aspekt fragst und Du bekommst eine entsprechende Antwort, ist eine Reaktion Deinerseits "Das habe ich so nicht gemeint" ausgeschlossen).
    • Lass uns mal über diese Aufgabenstellung schauen, damit wir als Außenstehende Fehler finden und gemeinsam fixen können.
    • Zerleg diese Aufgabenstellung in Arbeitspakete, das sind disjunkte Aspekte, die losgelöst von anderen Paketen bearbeitet werden können.
    • Mach Dir einen Plan, in welcher Reihenfolge die Arbeitspakete bearbeitet werden müssen, da iwann eines auf ein anderes zugreift.
    • Jetzt können wir eine oder mehrere Instanzen des Visual Studios starten.
      Bearbeite jedes dieser Arbeitspakete in einem separaten Projekt.
      Du kannst zu jedem dieser Arbeitspakete hier im Forum einen separaten Thread aufmachen, sofern erforderlich.
    • Wenn alle Arbeitspakete zu Deiner Zufriedenheit bearbeitet wurden, setze sie in wiederum einem neuen Projekt zusammen.
      Du hast nicht nur unheimlich viel gelernt, sondern Du hast den Anfang einer Snippet-Bibliothek, die Du beliebig erweitern sollst und aus der Du jederzeit bei neuen Projekten schöpfen kannst. :thumbsup:
    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!
    Hallo

    Ausgangssituation:
    • In einen Verzeichnis liegen .jpg Dateien die eine Skizze enthalten.
    • Jede Datei hat eine Kennung die aus 2 Buchstaben und 4 Zahlen besteht.
    • Diese werden momentan ausgedurck auf DIN A4 und nebeneinander aufgehängt.
    • Bei Änderung der Skizze kann diese übersehen wenn keine Konrolle auf aktualität gemacht wird.

    Ziel:
    • Diese Skizzen digital in Pictureboxen nebeneinander "aufhängen".
    • Zu jeder Skizze einen Datensatz erzeugen (Dateinamen und eine frei wählbare Bezeichnung).
    • Dieser Datensatz soll gespeichert werden können. (In etwa vergleichbar mit abhängen, in Ordner abheften und bei Bedarf wieder aufhängen.)
    • Zusätzlich sollen nur die Datensätze der aktuell Aufgehängten Skizzen in einer Datei gespeichert werden, um diese an andere Stellen auszulesen.


    Ich hoffe das ich euch so ein bisschen einen Einblick in mein Vorhaben geben kann.

    Grüße Daniel
    @**Daniel** Mit solch Beschreibung hättest Du diesen Thread starten sollen.
    Problem: Du hast bereits suboptimalen Code geschrieben.
    Lösung: Du schmeißt alles weg und startest mit dieser Beschreibung neu.
    =====
    Ansatz:
    FlowLayoutPanel, ein UserControl, in dem Deine Daten visualisiert werden, pro Bild auf Platte eine Instanz.
    Die Datensätze packst Du in eine DataTable, pro Instanz eine Zeile.
    Feddich.
    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!
    Danke für die schnelle Antwort.

    Diesen Ansatz habe ich bereits umgesetzt.
    Alles wegschmeißen würde ich ungerne da schon sehr viel Arbeit drinn steckt gerade im Desing der Form.

    Bei mir scheitert es einfach an der "Übersetzung" von VB6 Sachen wie z.B.:

    Visual Basic-Quellcode

    1. Form_1.Label_1.text = TextBox1.Text
    2. Form2.Show()

    in VB.net Code.

    Dies würde ich einfach gerne lernen und es dann ich meinen Code ersetzen bzw. umsetzen

    Daniel
    VB6 zu VB.Net "übersetzen" geht nicht.
    Geht schon... aber ist Murks.

    VB6 war nicht objektorientiert und die Denke dahinter ist gänzlich anders.

    Zudem ist die Arbeit am "Design" das Letzte was man vornimmt und nicht das Erste.
    Kann aber bei der Beschreibung auch eher ne 2-Minuten Arbeit sein...
    Vier Bildchen und fertig oO
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    Naja übersetzen ist das falsche Wort deswegen auch die " ".

    Ich würde einfach gerne das Code gemische auflösen und nur noch VB.net verwenden wollen.

    Dazu habe ich eben die VB6 Beispiel gepostet.
    So funtioniert es ja, aber diesen Befehl möchte ich jetzt eben durch VB.net Code ersetzen, verstehen und auch sinnvoll für die Zukunft anwenden können.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D