Übergabe von Klassen Variable an Form

  • VB.NET

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

    Übergabe von Klassen Variable an Form

    Hallo leute :D


    Ich weiss die frage ist sehr simpel, dennoch konnte ich nichts passendes bzw. verständliches dazu finden. ?(


    Ich hab ein Programm das eine Text Datei Zeile für Zeile ausliest, und diese in ein Eindimensionales Array schreibt.

    Nun das hab ich auf eine Klasse ausgelagert die ich loadin() genannt habe.

    Dort habe ich Zwei Variablen die ich drüben in der Hauptform brauche. (form1)

    Counter (integer) (Zum zählen der Zeilen und dimensionieren des Arrays)
    Einlesen(Counter) (Das Array mit den Zeilen aus der .txt datei in jeder Index Spalte)


    Jetzt häng ich jedoch fest.

    Ich habe keine Klassen gelernt, und da das ein größeres Projekt wird, wollte ich der übersichtlichkeitshalber den Code aufteilen in Klassen.

    Das Problem ist, ich habe in meinem Fach Abi alle Grundlagen der Programmierung (in VB) gelernt, jedoch haben wir nie etwas über Klassen gemacht.

    Könnte mir jemand sagen (oder anhand eines beispiels erklären) wie man, Variablen aus Klassen weitergibt/übergibt.

    Würde mich über eine Antwort freuen. :)
    @bozzkurt10
    Ich denke nicht, dass das Einlesen unbedingt in eine eigene Klasse ausgelagert werden muss. Ich erläutere trotzdem mal kurz, wie man eine Klasse für diese Anwendung aufbaut.

    Aufbau der Klasse

    Zum einen benötigst du Felder oder Eigenschaften. Hier ein Beispiel für öffentliche Felder:

    VB.NET-Quellcode

    1. Public Counter As Integer
    2. Public TxtFile As FileInfo


    Da es sich bei dieser Klasse um ein Objekt handelt, wird auch ein Konstruktor (wird aufgerufen beim Erzeugen des Objekts) benötigt. Hier ein Beispiel für einen Konstruktor:

    VB.NET-Quellcode

    1. ​Public Sub New(ByVal fileName As String)
    2. TxtFile = New FileInfo(fileName)
    3. End Sub

    Das Schlüsselwort New legt fest, dass es sich um einen Konstruktor handelt. Ein Konstruktor muss nicht zwingend für jede Klasse gecodet werden (Klassen die beim Erzeugen keine Parameter erfordern)

    Dann beinhalten Klassen auch noch Methoden (Subs, Functions). Auch hier ein kurzes Beispiel:

    VB.NET-Quellcode

    1. Public Function LoadIn() As String()
    2. Dim input As String() = File.ReadAllLines(TxtFile.FullName)
    3. Counter = input.Length
    4. Return File.ReadAllLines(TxtFile.FullName)
    5. End Function

    Diese Methode gibt den Text der Textdatei zurück und setzt die Counter Variable auf die Anzahl der Zeilen.

    VB.NET-Quellcode

    1. Imports System.IO
    2. Public Class TXTReader
    3. Public Counter As Integer
    4. Public TxtFile As FileInfo
    5. Public Sub New(ByVal fileName As String)
    6. TxtFile = New FileInfo(fileName)
    7. End Sub
    8. Public Function LoadIn() As String()
    9. Dim input As String() = File.ReadAllLines(TxtFile.FullName)
    10. Counter = input.Length
    11. Return File.ReadAllLines(TxtFile.FullName)
    12. End Function
    13. End Class

    Beim Erzeugen des TXTReaders muss ein Dateipfad übergeben werden. Die Eigenschaft TxtFile beinhaltet die Dateiinfo zum Pfad. In Counter wird gespeichert, wie viele Zeilen die Datei beinhaltet ( :!: Achtung: Die Variable Counter wird zum ersten mal in der LoadIn Methode festgelegt. Also muss zuerst LoadIn aufgerufen werden, bevor Counter den richtigen Wert hat. Da fällt dir sicher eine gute Lösung ein, damit Counter von Beginn an den richtigen Wert zurückgibt :P )


    Verwendung der Klasse

    So verwendest du nun das TXTReader-Objekt in einer Form:

    VB.NET-Quellcode

    1. ​Dim txtReader As New TXTReader(path)

    Nun existiert eine Variable mit dem Namen txtReader. So rufst du LoadIn auf:

    VB.NET-Quellcode

    1. txtReader.LoadIn()

    Den Wert von Counter bekommst du so:

    VB.NET-Quellcode

    1. Dim i As Integer = txtReader.Counter

    usw.

    Hoffentlich konnte ich es verständlich erklären :D

    Gruß
    Switcherlapp97
    RubiksCubeSolver


    Jetzt im Showroom
    Danke erstmal für die super antwort !

    Da wir Klassen noch nie hatten weiss ich nicht genau wann man sie benutzt bzw. wofür.
    Auch das Galileo Computing Online Buch Visual Basic 2010 hat mich nicht viel schlauer gemacht.

    Wichtig war für mich jetzt der letzte teil das war wonach ich gesucht habe:

    Quellcode

    1. Dim i As Integer = txtReader.Counter


    Ich wusste nicht wie man Klassen übergreifend Variablen weitergibt :D

    Jetzt weiss ichs, ich denk den rest sollt ich selbst schaffen.

    Vielen vielen dank für die Hilfe :thumbsup:

    bozzkurt10 schrieb:

    wie man Klassen übergreifend Variablen weitergibt
    Gib der Klasse entsprechende Properties, die Eltern-Klasse kann diese Properties setzen und Auslesen wie Variable.
    Setze eine, ruf eine Prozedur auf und lies das Resultat aus.

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    3. Dim cc = New NewClass
    4. cc.x1 = 2
    5. cc.x2 = 5
    6. cc.Add()
    7. Me.Label1.Text = cc.summe.ToString
    8. End Sub
    9. End Class
    10. Public Class NewClass
    11. Public Property x1 As Integer
    12. Public Property x2 As Integer
    13. Public Property summe As Integer
    14. Public Sub Add()
    15. summe = x1 + x2
    16. End Sub
    17. End Class
    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!
    wurde schon gesagt: hier ist eine eigene Klasse nicht nötig.
    Woraus logisch folgt, dass hier eine eigene Klasse einzusetzen schlicht falsch wäre.

    Du magst zwar alles mögliche übers Programmieren gelernt haben, aber vlt. das wesentlichste ist, dass man sich hüten soll, Konzepte und Sprachkonstrukte auf Probleme anzuwenden, die es nicht erfordern.

    Grade ein größeres Projekt wäre dadurch extrem gefährdet, denn es wird auch ohne solch unnützen Code kompliziert genug werden.

    Übrigens nach dem, was ich so mitbekomme, taugt Schul-informatik-Unterricht nicht die Bohne.
    Falls dein Projekt was mit Daten zu tun hat, kannst du mal in "meinen" Stoffplan" reinspickeln ;) : Datenverarbeitungs-Vorraussetzungen

    Beachte: manche Links kannst du vlt. einfach abnicken, andere binnen einer Stunde dir aneignen, anneres (v.a. die Buch-Empfehlung) müsste eiglich in monatelange Arbeit durchgearbeitet werden.

    RodFromGermany schrieb:

    bozzkurt10 schrieb:

    wie man Klassen übergreifend Variablen weitergibt
    Gib der Klasse entsprechende Properties, die Eltern-Klasse kann diese Properties setzen und Auslesen wie Variable.
    Setze eine, ruf eine Prozedur auf und lies das Resultat aus.

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    3. Dim cc = New NewClass
    4. cc.x1 = 2
    5. cc.x2 = 5
    6. cc.Add()
    7. Me.Label1.Text = cc.summe.ToString
    8. End Sub
    9. End Class
    10. Public Class NewClass
    11. Public Property x1 As Integer
    12. Public Property x2 As Integer
    13. Public Property summe As Integer
    14. Public Sub Add()
    15. summe = x1 + x2
    16. End Sub
    17. End Class


    Danke das werd ich mir nochmal genauer anschauen. :)

    ErfinderDesRades schrieb:

    wurde schon gesagt: hier ist eine eigene Klasse nicht nötig.
    Woraus logisch folgt, dass hier eine eigene Klasse einzusetzen schlicht falsch wäre.

    Du magst zwar alles mögliche übers Programmieren gelernt haben, aber vlt. das wesentlichste ist, dass man sich hüten soll, Konzepte und Sprachkonstrukte auf Probleme anzuwenden, die es nicht erfordern.

    Grade ein größeres Projekt wäre dadurch extrem gefährdet, denn es wird auch ohne solch unnützen Code kompliziert genug werden.

    Übrigens nach dem, was ich so mitbekomme, taugt Schul-informatik-Unterricht nicht die Bohne.


    1. Kann sein dazu kann ich nichts sagen.
    2. Joa das klingt plausibel nehm ich mir zu herzen ^^
    3. -
    4. Dem letzteren kann ich nicht zustimmen aufgrund der folgenden begründung:

    Es ist klar das Schul Informatik nicht vergleichbar mit der Informatik auf FH und Uni niveau ist, dennoch es ist sie, meiner meinung nach sinnvoll da man dort die "----> Grundlagen <----" lernt.

    Grundlagen heißt :

    Was ist ein Algorithmus
    PAP
    Sinnvolle deklaration von Variablen
    Datentypen
    Schleifen (for , select case, Until/While ..)
    Unterprogramme
    Arrays

    Solche sachen.

    Objektorientierte Programmierung ist fortgeschrittene Programmierung, und sowas lernt man nicht mal eben so. Aber immerhin fängt man mit etwas an.

    Ich weiss ja nicht, aber deine aussage ist mir ein wenig zu abwertend und sogar bisschen herablassend.

    Dennoch will ich jetzt nicht näher darauf eingehen und danke dir trotzdem für dein feedback.
    Auserdem schau ich mir ma den link gleich an wenn ich zuhause bin.

    Mfg bozzkurt10 :D

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

    Er hat aber Recht ;) Wir hatten schon so viele Fragesteller die in der Schule absoluten Mist gelernt haben. Sehr oft haben die Lehrer leider keine Ahnung. Dadran trägt der Schüler keine Schuld, da der dass natürlich nicht beurteilen kann, aber einem ist von soetwas abzuraten. Man fährt mit dem passenden Buch um einiges besser.
    Für mich gehört zu den Grundlagen, der Aufbau der Sprache, Verwendung der IDE und der RT-Bibliothek. Dazu gehören nicht nur Syntax, sondern auch objektorientierte Prinzipe. Wenn diese Grundlagen erstmal sitzen, dann kann man mit Leichtigkeit darauf aufbauen. Ohne Objektorientierung gibtst du dir früher oder später die Kugel. Zumindest bekomm ich schon Anfälle wenn ich durch irgendwelche C-Snippets durchblicken soll.
    jo, ich werd oft für arrogant gehalten - ist ja egal, solange noch iwie durchdringt, was ich inhaltlich mitzuteilen versuche.

    Also guck dir meine Aufstellung ganz genau und ausführlich an, es geht dabei weniger ums Programmieren im Einzelnen (also Algorithmen, Verzweigungen etc) als darum, wie man sich in die Lage versetzt, das Programmieren eigenständig zu erlernen.
    Also wie man das VisualStudio für sich arbeiten lässt und wie man aus der (gewaltigen!) Dokumentation das KnowHow zieht, was man braucht, ja - und auch Grundlagen zur Datenmodellierung - weil da gibts soweit ich weiß kaum was gscheits.
    Ja, und - sorry - bei den von dir genannten Grundlagen fehlt bisher komplett das Thema OOP - siehst du ja selbst - das ist im dort genannten Buch auch ausgezeichnet abgehandelt.
    Und noch einer von mir.
    Es ist wichtig,
    1. zu erkennen, wer Müll erzählt. Der Lehrer, einzelne Mitglieder im Forum oder alle Mitglieder im Forum.
    2. daraus folgend zu wissen, wem bzw. wo welche Frage gestellt werden kann.
      Das Forum ist anonym, hier werden keine Noten verteilt, allerdings wird hier klar gesagt, dass ein Lehrer aufgrund dieser und jener Aufgabenstellung oder Problembeschreibung keine Ahnung hat. Das wirst Du in der Schule so nicht sagen können.
    3. zu lernen, wie man an benötigte Informationen kommt. MSDN, Google. Das Forum kommt erst deutlich später.
      Und diejenigen Kollegen, die sofort das Forum befragen, ohne selbst suchenderweise aktiv zu werden, zeigen uns damit, dass sie keine Ahnung haben. Sorry.
    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!
    So, hofflich verschrecken wir dich nicht, unds kommt dir vor, als hackten alle auf deim armen Lehrer herum, dessen Kompetenz uns ja tatsächlich völlig unbekannt ist.
    Ist halt blöde für einen Einsteiger, dass ihm das Wissen, wasser bräuchte, um zu erkennen, wer Müll erzählt, und wo verlässliches Wissen zu holen ist - dass ihm genau dieses Wissen logischerweise fehlt.
    Man ist also ziemlich ausgeliefert, und ist zunächstmal blinde Vertrauenssache, welchem Lehrer oder Forums-Propheten man hinterherrennt ;) .
    Und natürlich bleibst du erstmal beim ersten und leibhaftigsten, halt bei deim Lehrer.

    Ist dir vmtl. auch gar nicht nachvollziehbar die Eindringlichkeit, mit der gleich vor schlechten Lehrern gewarnt wird, aber das ist halt Erfahrungssache: Jemand, der eine Zeitlang mit einem schlechten Lehrer gearbeitet hat, oder auch nur mit einem schlechten Buch, oder mit schlechten Tutorials - der übernimmt natürlich das gelernte, und codet folglich schlecht bis grauenhaft - manchmal über Jahre.
    Und ist auch extrem schwer, ihn davon wieder abzubringen, also wenn du erstmal 500 Zeilen (Schrott) gecodet hast, dann hast du ganz natürlich einen starken Hang, in genau dieser grauenhaften Manier fortzufahren, statt das oft einzig richtige zu tun: nämlich alles löschen und vom angemesseneren Ansatz aus neu anzufangen.
    Zumal der angemessenere Ansatz ja erst noch zu erlernen ist.
    "Anfänger-Verderber" nenne ich sowas ;)
    @ErfinderDesRades
    Hmm vielleicht hast du da recht, zumals du meine lage auch zu verstehen scheinst.
    Ich vertrau natürlich nicht direkt jedem "Forums-Propheten" alledings ist dieses Forum ziemlich vertrauenswürdig bzw. seriös geführt woraus ich schliesse das da was dran ist.

    Achso btw. es kommt mir eher so vor als hacken alle auf mir rum, und ich wäre zu inkompetent (siehe bestimmte aussagen oben)

    @RodFromGermany

    Es ist nicht meine meine art direkt in einem Forum zu fragen ohne mich vorher auf Google umgeschaut/schlau gemacht zu haben (das aber kannst du evtl. nicht gewusst haben)

    Ich verstehe ja auch das es nervig ist wenn jeder dahergelaufene Anfänger kommt und simple Fragen stellt die er sich eig. selber beantworten könnte (evtl. durch Google), trotzdessen kann man sich auch anders ausdrücken statt gleich Feindseelig drauf loszuschiessen. (Sorry.)

    Ich würde diese Diskussion gerne hier beenden weil das ein hilfs und kein diskussions Forum ist.
    Ich habe das ein oder andere mitgenommen und lasse mich gerne auch mal des besseren belehren. (danke nochmal an @ErfinderDesRades )

    Allerdings hab ich keine lust auf den radau der entsteht wenn ich hier was fragen will also lass ichs in Zukunft mit den Fragen auf diesem Forum, und verhalte mich viel lieber passiv wenn ich was brauch.

    Das ist mein Standpunkt bis hier.

    Mit Freundliche Grüßen bozzkurt10
    Tja, schade, du wählst den Weg des Einzelkämpfers (und verdirbst und damit den Spaß ;) )
    Ist aber auch ein Riesiko für dein Projekt - grad inne Datenbänkerei gerät man eiglich fast zwangsläufig auf völlig bescheuerte Ansätze, und ohne Korrektiv entstehen da ganz grauenhafte Anwendungsmonstren.
    Und da weiß man nicht, was schlimmer ist: Ob der Code-Schrott nach zigtausend Zeilen dann doch in die Tonne muss, oder ob so eine Code-Obszönität am Ende tatsächlich ungefähr tut was sie soll, also nie mehr ein Korrektiv erhält 8|
    Da hat dann einer in Monaten 10000 Zeilen an einer Video-Sammlung-Verwaltung geschrieben "total viel gelernt", und meint, er verstehe nu was von Datenbank-Anwendungen, und unsereiner arroganter Schnösel kriegt seinen FacePalm-Krampf, weil das wäre auch in 500 Zeilen abzuhandeln gewesen, und im Ergebnis besser.

    aber guck dich fleissig bei den Tipps&Tricks um, und gugge auch die Videos auf dieser Site: Forms over Data Videos.
    Hüte dich vor YouTube - zu 99,9% wird da nur grauseliges gezeigt, meist sogar ohne downloadable Beispiel-Dateien.

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