Anfänger Problem mit Label

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

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von Wiwa83.

    Anfänger Problem mit Label

    Hallo liebe Leute
    Ich bin Wiwa der neue im Forum und habe erst seit gut 3 Tagen VB zu tun.
    hab auch schon paar Vorschläge hier im Forum getestet, zum Ende bin ich so verwirrt das ich wieder von vorne mein Projekt starte und neu aufsetze :/ .
    Nun zu meinem Problem.
    Da ich Sportschütze bin und meine Trainingsergebnise in Excel festhalte, wollte ich mir gerne eine Exe über VB erstellen.
    Die später mal auf die Excel zugreiften, die alten Ergebnise mit den neuen überschreibt und speichert soll. So weit der Plan.
    Habe damit begonnen meine From zuerstellen wie ich mir das so gedacht habe erst mal im kleinen zum testen.



    Habe es so weit hinbekommen das er mir alles zusammen rechnet wenn ich es Eintrage bis zu Zw Ergebnis1 und Zw Ergebnis2 die als Label erstellt sind.
    Nun versuche ich das er die 2 Labels Zw1 und Zw2 zusammen zählt. Aber geht nicht kommt ein Fehler wenn ich den test starten will.

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub s3_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles s2.TextChanged
    3. Dim s_1 As Integer = s1.Text
    4. Dim s_2 As Integer = s2.Text
    5. zw1.Text = s_1 + s_2
    6. End Sub
    7. Private Sub s4_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles s4.TextChanged
    8. Dim s_3 As Integer = s2.Text
    9. Dim s_4 As Integer = s4.Text
    10. zw2.Text = s_3 + s_4
    11. End Sub
    12. Private Sub lb_End_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lb_End.TextChanged
    13. Dim zw_1 As Integer = zw1.Text
    14. Dim zw_2 As Integer = zw2.Text
    15. lb_End.Text = zw_1 + zw_2
    16. End Sub
    17. End Class


    habe dann

    VB.NET-Quellcode

    1. Private Sub lb_EndTextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lb_End.TextChanged
    auf

    VB.NET-Quellcode

    1. Private Sub lb_End_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lb_End.Click
    gestellt da geht es aber nur wenn ich auf das Label klick was ich nicht möchte.
    Wo liegt mein Fehler begraben?

    Mit Freundlichen Grüßen
    Wiwa

    Bild von werbeversuchtem Freehoster als Dateianhang eingefügt. ~Thunderbolt

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

    Welcher Fehler kommt denn beim Starten?

    Du solltest dich zunächst mit dem Thema Datentypen beschäftigen.

    Falsch: Dim s_3 As Integer = s2.Text
    Besser: Dim s_3 As Integer = CInt(s2.Text)
    Noch besser: .TryParse(String) - kannste mal googlen

    Du musst Strings (s2.Text Hat den Datentyp String) in Zahlen (Integer, Double, Decimak, etc.) konvertieren, bevor du damit rechnest. Dein VisualStudio macht ohne das die Konvertierung selbst (auf gut glück), was manchmal zu komischen Ergebnissen führt (z.B. Wenn in deiner Textbox "Toastbrot" steht). Daher schreib an die Erste Zeile in deiner Form Option Strict On. Dann werden dir nämlich solche Fehler angezeigt.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    1. Willkommen im Forum
    2. Wenn Du mit VisualStudio arbeitest, fahre mit der Maus über lb_End.TextChanged (v.a. den hinteren Teil) und lies Dir die Info durch. Dann weißt Du, wann da was gerechnet wird bzw. wann jene Prozedur überhaupt ausgeführt wird.
    3. Bitte schalte Option Strict auf On.

    VB.NET-Quellcode

    1. Dim s_3 As Integer = s2.Text

    Denn ein Text ist keine Zahl. Das war er nie. Ein Text ist eine Ansammlung von Zeichen. Eine Zahl m.E. eine abstrakte Mengengröße. Ein Text kann höchstens eine Zahl darstellen/anzeigen. Aber sobald RodFromGermany kommt und in den Text seine Rouladen mit Klöße reinsteckt, ist's aus mit Rechnerei.
    4. Wann soll denn das Endergebnis Deinen Wünschen nach angezeigt werden?
    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.
    Ok danke für die Antworten
    Ist mir schon klar das man aus Wörtern keine Zahlen machen kann.
    Gut dann hab ich was zu verbessern.
    ​4. Wann soll denn das Endergebnis Deinen Wünschen nach angezeigt werden?

    Sollte dann kommen wenn beide Zwischen-Ergebnise vorhanden sind und ohne das ich was drücken muss.

    Wiwa83 schrieb:

    Sollte dann kommen wenn beide Zwischen-Ergebnise vorhanden sind

    Hm. Das ist schwierig. Klar, Du könntest am Ende von s3_TextChanged und s4_TextChanged (gibt es da keine aussagekräftigeren Namen?) das Zwischenergebnis berechnen und annzeigen lassen, aber keiner weiß, wann die Eingabe beendet ist. Selbst Du als Programmierer nicht. Woher weißt Du, dass ein Benutzer, der bisher 987 eingegeben hat, nicht auch noch 654321,012 eintippen will? Es kommen bei der Variante dann eben vermeintliche Endergebnisse, obwohl die Eingabe noch nicht zuende ist.
    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.
    Ok verstehe. könnte es noch

    VB.NET-Quellcode

    1. ​Schuss_3_TextChanged
    schreiben.
    Dann muss ich nochmal von vorne angangen und nachlesen.
    mit VBA in Excel hat das ganz gut geklappt das er mir die 2 Zwischen-Ergebnise dann zusammengerechnet hat.
    Danke für eure mühen.
    @Wiwa83 Wilkommen im Forum. :thumbup:
    Da Du es hier offenbar mit nur einfachen mathematischen Operationen zu tun hast, empfehle ich Dir, die TextBox-Controls rauszuwerfen und durch NumericUpDown-Conrols zu ersetzen.
    Da kommt keiner auf die Idee zu fragen, was passiert, wenn da "Roulade mit Klößen" in der TextBox drinne steht.
    Allerdings ist das kein Grund, nicht mal bei Option Strict vorbei zu schauen, setze das stets auf On, wie @VaporiZed bereits schrieb.
    Mit den Typen musst Du Dich eh befassen, denn die Werte vom NumericUpDown sind vom Typ Decimal, aber da reicht ein CInt(NumericUpDown1.Value) zur Konvertierung aus.

    Dann: Trenne Daten und GUI.
    Mit Daten wird gerechnet und sonst wie gearbeitet, die GUI zeigt Daten an.
    Verwende nicht ein Control, um einen Wert zu speichern, sondern nur, um ihn anzuzeigen oder zu editieren.
    Gehalten werden Daten in Variablen entsprechenden Typs.

    Wenn Du das hier verinnerlichst, wirst Du bereits bei Deinem nächsten Programm sehr viel weniger Startprobleme haben.
    Und: Schreib zunächst ganz genau auf, was Dein Programm tun soll, scheib auf, wie Daten fließen, woher und wohin, denn wenn Du später mit Excel kommunizieren willst, brauchst Du einen präzisen Plan.
    Schreib auch auf, was das Programm (zunächst noch) nicht können muss, das ist wichtig für die Verteilung der Prioritäten für die Bearbeitung der einzelnen Programmteile.
    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 vielen dank für die hilfe.
    Ist am Anfang alles bissel verwirrent aber wird schon :) .

    Option Strict On steht jetzt immer dabei.

    Was mein Programm können sollte:
    Grundfunkion-Hauptfuktion
    1. Auf eine bestimmte Excel Datei zugreifen (bearbeiten,speichern,schliessen)
    2. Aktuelles Datum in einer TextBox anzeigen das aber änderbar ist.
    3. in der Form selbst sollen 2 Serien zu sehen sei. Eine Serie besteht aus 40 Schuss zu a 5 Schuss auf eine Scheibe.
    4. diese 5 Schuss sollen per hand eingetragen werden und vom Programm selbstständig zusammen gezählt werden.
    5. Die eingetragen Zahlen sollen dann in Bestimmte Excel Zellen geingetragen werden z.B. A4.
    6. nach 40 Schuss soll das Programm die 5 Schuss-Ergebnise zusammenrechen selbstständig.
    7. ein Button Zum übertragen in die Excel der diese öffnet, überschreibt, speichert und schliesst.
    8. Ein Button zum schliessen der Form.
    Zusatzfunktionen:
    1. auswählen oder suchen der Excel über die From
    2. Fehlermeldungen über MsgBox wenn nicht alles ausgefüllt ist oder Buchstaben geschrieben werden.
    3. Meldung für Erfolgreiches speichern.
    Hoffe hab es So gut wie möglich beschrieben.
    Könnte auch meine Macro Excel mit VBA hochladen as beispiel was ich vor habe.

    Es ist schwer in die Programmierwelt rein zukommen aber es macht spass.
    Finde es Sehr intresant Programme die als selbstverständlich angesehen werden, zu durchleuchten wie sie überhaupt
    funktionieren und was eigentlich für ein Aufwand dahinter steckt das zb der Button wenn ich den drücke das Fenster vom Browser schliesst.

    MFG
    Wiwa

    Wiwa83 schrieb:

    Ist am Anfang alles bissel verwirrent
    Das Einfache ist halt das Schwierige, das ich kann. :D

    OK.
    1. Excel-Datei bearbeiten - wie komplex ist die?
      lässt sich der relevante Inhalt in einer einzigen Tabelle (DataTable) ablegen?
    2. Datum wovon?
    3. kein Problem, das ist eine Frage des Layouts.
    4. Eine Zeile in einer Tabelle
      oder
      eine Instanz eines UserControls, von denen beliebig viele in einem FlowLayoutPanel abgelegt werden
    5. das läuft über die kommunizierende DataTable.
    6. kein Problem, das kann On The Fly passieren mit automatischer Zu-Ende-Überwachung
    7. was ist hier der Unterschied zu 1)?
    8. immanent.
    =====
    1. Button mit Datei-Auswahl-Dialog, siehe Punkt 1) und 7) oben
    2. Das übernimmt das Validating, das Verhindern der Eingabe von Nicht-Ziffern machen wir direkt bei der Eingabe
    3. Ja.
    Jou, das ist in VB.NET ein wenig anders und komplizierter als in VBA, da VBA genau für solch Probleme gemacht wurde.
    Die .NET-Entwicklung umfasst ja beliebig komplexe Aufgabenstellungen, und da kann man nicht erwarten, dass es für jedes Teilproblem bereits eine fertige Lösung gibt.
    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!
    @Wiwa83
    Ich habe mir den Beitrag Nr.8 angeschaut und kann dazu nur grob sagen:
    ​1. Excel Datei öffnen
    2. Daten eingeben
    ​3. Excel Datei speichern und schließen
    ​Nichts von dem was du beschreibst, erfordert ein VBA oder VB.NET Programm. Warum möchtest du den erheblichen Mehraufwand für ein Programm auf dich nehmen, wenn es in Excel direkt geht ? Um Bereiche in Excel vor falschen Eingaben zu schützen, gibt es den Zellschutz (damit unbedarfte Benutzer nicht die Excel Tabelle zerschießen).
    support.office.com/de-de/artic…8a-4267-8c43-042a5f2cd93a
    So
    1. Die Excel Datei ist nur eine Tabelle aslo alles auf einer Seite

    Zu Punkt 2. Mit Datum meine ich das Akutelle Datum ( Betriebssystem) aber veränderbar ist falls man z.b einen Tag später die Ergebnise einträgt.


    Zu Punkt 4. Ja das der Schuss 1 auch im Excel bei Schuss 1(A5) ist siehe Bild 1 .

    Warum möchtest du den erheblichen Mehraufwand für ein Programm auf dich nehmen, wenn es in Excel direkt geht ?


    Ganz einfach gesagt weil ich das möchte .
    Bilder
    • excel_bild.jpg

      275,52 kB, 1.924×1.008, 113 mal angesehen
    • front.jpg

      124,64 kB, 1.002×960, 98 mal angesehen

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Wiwa83“ ()

    Wiwa83 schrieb:

    das Akutelle Datum
    wovon? Vom Betriebssystem?
    Nutze bitte die Dateianhangs-Funktionalität des Forums: Erweiterte Antwort => Dateianhänge => Hochladen
    und editiere Deinen letzten Post entsprechend, denn die Links sind korrupt.
    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!
    @Wiwa83 So kannst Du eine Excel-Tabelle in ein DataSet laden und anzeigen:
    Excel_Zugriff.zip
    Spiel mal ein wenig damit rum, um ein Fingerspitzengefühl zu bekommen.
    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!