Lesen von .txt Datei und trennen

  • VB.NET
  • .NET (FX) 4.0

Es gibt 181 Antworten in diesem Thema. Der letzte Beitrag () ist von Lightsource.

    Ich bin soooooo froh es ist endlich geklärt.
    Es läuft ich habe mir nun ein paar RadioButtons gemacht statt den CheckBoxen und es funktioniert direkt auf anhieb.
    Ich danke euch sehr :)
    Somit kann dieser Beitrag geschlossen und als gelöst markiert werden.
    Falls noch was neues ist melde ich mich wieder zu Wort :)
    Hier mal ein erster Einblick ins Thema DataBinding an Deinem Schmuckstückbeispiel. Ohne RadioButtons, sondern mit normalen Buttons. Dem Code kannst Du entnehmen, wie wenig da gemacht werden muss. Das meiste macht das DataBinding. Im Designer wird eingestellt, welche Teile der Schmuckstückklasse in den Boxen angezeigt werden soll. Da der DataBinding-Code automatisch in einer Sonderdatei steckt und somit erstmal unsichtbar ist, wundert sich der DataBinding-Einsteiger, wo die Magie passiert. Das wichtigste: nicht im eigenen Code, sodass man sich auf die eigentlichen Dinge im Programmieren konzentrieren kann.
    Dateien
    • WinFormsVB.zip

      (33,11 kB, 45 mal heruntergeladen, zuletzt: )
    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.

    VaporiZed schrieb:

    normalen Buttons

    Funktioniert das mit RadioButtons auch?
    Vielen Dank ich werde mir das gleich ansehen :)

    Habe ein kleines weiteres Problem leider:
    Ich will in einer der ComboBoxen als Standart Text eine 0 drinnen stehen haben.
    Ich gehe in den Designer -> klicke die ComboBox an -> schreibe rechts in den Eigenschaften bei Text eine 0 -> drücke Enter -> 0 verschwindet?
    Klar geht das auch mit RadioButtons. Aber das wäre m.E. ein Designerproblem. Wenn ich RadioButtons sehe, denke ich: ok, ich kann da was auswählen bzw. muss mich für eine von mehreren Optionen entscheiden und dann geht es irgendwie weiter. Also z.B.:

    Ich kann oben auswählen, welche Art von Daten ich bei diesem fiktiven Programm exportiere und unten welche Daten-Zeiträume. Und erst, wenn ich auf den Button klicke, passiert was. Die RadioButtons sind nur zur Auswahl da. Ich erwarte NICHT, dass irgendwas (Großartiges*) passiert, wenn ich auf einen RadioButton klicke. Das wär sonst kontraintuitiv und somit Fehldesign.


    Willst Du das mit der 0 in der ComboBox in meinem Beispielprogramm machen? Das geht dank DataBinding erstmal nicht. Oder willst Du es in Deinem Programm machen? Wofür soll die 0 stehen?




    * was akzeptabel wäre: GUI-Veränderung. Wenn ich unten auf [kompletter Zeitraum] klicke, darf gerne das Monatsauswahlfeld (DateTimePicker) deaktiviert werden. Aber mehr bitte auch nicht.
    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.
    Das klingt etwas undeutlich. Beschreib mal bitte ganz konkret, was es mit der 0 auf sich hat. Das klingt, als ob Du was versuchst, was man eigentlich auf anderem Wege lösen sollte.
    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.
    Nochemol gefragt:
    1. Bist Du in Deinem Projekt (ohne DataBinding) oder in meinem (mit DataBinding)
    2. Welche konkrete Aufgabe soll diese ominöse 0 erfüllen?
    Was ich mit meinem Vorpost sagen wollte: Die Aufgabe der 0 kann man sicherlich auch anders lösen. Es ging mit nicht um das Hinzufügen der 0 zur ComboBox.
    Wenn ich eine ungebundene ComboBox nehme, klicke ich sie im Designer an, geh auf den SmartTag [>], klicke auf Einträge bearbeiten, setze die 0 rein und klick auf [OK]. Dann ist sie beim Programmlauf auch da.
    Was machst Du konkret? Willst Du die 0 zur Programmierzeit oder zur Laufzeit des Programms hinzufügen? Und was hat es (nochmal gefragt) überhaupt ganz konkret mit der 0 auf sich?
    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.

    VaporiZed schrieb:

    Bist Du in Deinem Projekt (ohne DataBinding)

    Ja ich bin in meinem Projekt ohne DataBinding.
    Es ist komplizierter zu erklären als wenn der Designer einfach die 0 annehmen würde, dann wäre das Problem gelöst.
    Ich brauche einfach eine 0 da drinnen stehen die solange nichts angeklickt ist, weil ich in meinem Code die 0 für die richtige Ausführung des "Commands" brauche.

    Edit:
    Vergiss es ich habs hatte bei der ComboBox bei DropDownStyle: DropDownList drinnen = deswegen hat er die 0 nicht angenommen habs nun auf DropDown ging nun und das was ich will funktioniert.

    @VaporiZed
    Es hat sich ein weiteres kleines Problem ergeben.

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

    Nämlich?
    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.

    VaporiZed schrieb:

    Nämlich?

    Es ist schwierig zu erklären aber ich versuche es mal.
    Ich klicke auf den RadioButton -> erster Eintrag aus der .txt wird in die ComboBox1 eingelesen -> ich wähle was aus in der ComboBox1 -> erhalte in der TextBox den zweiten Eintrag aus der .txt -> ich habe jedoch noch zwei weitere ComboBoxen die je nachdem was man auswählt einen weiteren Text in die TextBox einfügen sollen.
    Soweit so gut das funktioniert auch alles nur hab ich ein kleines Problem.
    Die beiden anderen ComboBoxen haben eine 0 drinnen stehen als Text (weil ich das so brauche), ändere ich bei der ersten dieser zwei ComboBoxen den Eintrag von 0 auf was anderes (hat 12 Einträge -2 bis 10) fügt sich einer der ausgewählten Zahlen hinten dran an den Text in der TextBox -> ändere ich bei der nächsten ComboBox die Zahl von 0 auf was anderes (hat 10 Einträge 0 bis 10) wird auch hier der Eintrag in der TextBox hinten eingefügt.
    Somit erhalte ich dann in der TextBox "zweiter Eintrag aus der .txt + die Zahl der zweiten ComboBox + die Zahl der dritten ComboBox.
    Soweit gut funktioniert auch.
    Ich will das wenn ich bei ComboBox 2 und 3 den Eintrag wieder auf 0 ändere die TextBox beide Werte aus der TextBox raus nimmt.
    Somit bleibt dann in der TextBox nur "zweiter Eintrag aus der .txt)
    Funktioniert ebenfalls.

    Nun das Problem:
    Bei Programstart solange ComboBox3 eine 0 drinnen stehen hat funktioniert es, dass wenn ich bei der zweiten ComboBox eine Zahl auswähle ich nur "zweiter Eintrag aus der .txt + ComboBox2 erhalte.
    Ändere ich in der ComboBox3 die Zahl auf was anderes und dann wieder auf 0 wird diese in der TextBox nicht gecleart.
    Heißt diese 0 muss hinten weg wenn ich von einem anderen Eintrag wieder auf 0 klicke.
    Das selbe Problem andersrum genau so wenn was anderes außer 0 in ComboBox2 steht und in ComboBox3 steht erhalte ich in der TextBox ebenfalls:
    "zweiter Eintrag aus der .txt + ComboBox2 + ComboBox3"
    Ich verstehe sogar wo das Problem liegt leider bekomme ich es nicht hin das richtig zu coden.
    Das Problem ist das ich:
    If ComboBox_EQARarity.Text = "0" And ComboBox_EQAUpgrade.Text = "0" Then
    drinnen habe und sobald einer der 0 nicht drinnen steht führt der Code Else aus.

    VB.NET-Quellcode

    1. 'Make EQAAdventurer "Public" to use
    2. Private ReadOnly EQAAdventurer As New List(Of String)
    3. Private Sub GunaRadioButton_EQAAdventurer_CheckedChanged(sender As Object, e As EventArgs) Handles GunaRadioButton_EQAAdventurer.CheckedChanged
    4. 'Read File & Split EQAAdventurer
    5. Dim lines() = System.IO.File.ReadAllLines("Ring.txt")
    6. EQAAdventurer.Clear()
    7. ComboBox_EQAItem.Items.Clear()
    8. TextBox_EQACommand.Clear()
    9. For Each line In lines
    10. Dim parts() = line.Split(","c)
    11. ComboBox_EQAItem.Items.Add(parts(0))
    12. EQAAdventurer.Add(parts(1))
    13. Next
    14. ComboBox_EQAItem.SelectedIndex = -1
    15. '<<<------>>>
    16. End Sub
    17. Private Sub ComboBox_EQAItem_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox_EQAItem.SelectedIndexChanged
    18. 'Get Entry EQAAdventurer from ComboBox and write in TextBox
    19. If (ComboBox_EQAItem.SelectedIndex >= EQAAdventurer.Count) Then
    20. Return
    21. End If
    22. If ComboBox_EQARarity.Text = "0" And ComboBox_EQAUpgrade.Text = "0" Then
    23. TextBox_EQACommand.Text = "$ci " + EQAAdventurer(ComboBox_EQAItem.SelectedIndex)
    24. Else
    25. TextBox_EQACommand.Text = "$ci " + EQAAdventurer(ComboBox_EQAItem.SelectedIndex) + " " + ComboBox_EQARarity.Text + " " + ComboBox_EQAUpgrade.SelectedItem
    26. End If
    27. '<<<------>>>
    28. End Sub
    29. Private Sub ComboBox_EQARarity_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox_EQARarity.SelectedIndexChanged
    30. 'Get Entry EQAAdventurer from ComboBox and write in TextBox
    31. If (ComboBox_EQAItem.SelectedIndex >= EQAAdventurer.Count) Then
    32. Return
    33. End If
    34. If ComboBox_EQARarity.Text = "0" And ComboBox_EQAUpgrade.Text = "0" Then
    35. TextBox_EQACommand.Text = "$ci " + EQAAdventurer(ComboBox_EQAItem.SelectedIndex)
    36. Else
    37. TextBox_EQACommand.Text = "$ci " + EQAAdventurer(ComboBox_EQAItem.SelectedIndex) + " " + ComboBox_EQARarity.Text + " " + ComboBox_EQAUpgrade.SelectedItem
    38. End If
    39. '<<<------>>>
    40. End Sub
    41. Private Sub ComboBox_EQAUpgrade_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox_EQAUpgrade.SelectedIndexChanged
    42. 'Get Entry EQAAdventurer from ComboBox and write in TextBox
    43. If (ComboBox_EQAItem.SelectedIndex >= EQAAdventurer.Count) Then
    44. Return
    45. End If
    46. If ComboBox_EQARarity.Text = "0" And ComboBox_EQAUpgrade.Text = "0" Then
    47. TextBox_EQACommand.Text = "$ci " + EQAAdventurer(ComboBox_EQAItem.SelectedIndex)
    48. Else
    49. TextBox_EQACommand.Text = "$ci " + EQAAdventurer(ComboBox_EQAItem.SelectedIndex) + " " + ComboBox_EQARarity.Text + " " + ComboBox_EQAUpgrade.SelectedItem
    50. End If
    51. '<<<------>>>
    52. End Sub

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

    Dann mach es anders. Was Du wohl willst, ist doch ein Textzusammenbau. Also

    VB.NET-Quellcode

    1. Dim FinalCommand = "$ci " + EQAAdventurer(ComboBox_EQAItem.SelectedIndex)
    2. If ComboBox_EQARarity.Text <> "0" Then FinalCommand &= " " & ComboBox_EQARarity.Text
    3. If ComboBox_EQAUpgrade.Text <> "0" Then FinalCommand &= " " & ComboBox_EQAUpgrade.SelectedItem
    4. TextBox_EQACommand.Text = FinalCommand

    btw: ComboBox_EQAUpgrade.SelectedItem? Du arbeitest doch nicht etwa mit Option Strict Off, oder?
    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.

    VaporiZed schrieb:

    Option Strict Off


    Nein eigentlich nicht mir gings nur darum das der Code erkennen soll wenn ich was auswähle in der ComboBox.
    Ich weiß nicht mal was Option Strict Off ist
    Und wie es aussieht hab ich oben im Text nen kleinen Fehler drinnen.
    ComboBox_EQAUpgrade funktioniert nun wie es sein soll nur was ich vergessen habe wenn ComboBox_EQARarity nicht gewählt ist also 0 dann muss diese 0 auch in die TextBox eingetragen werden wenn ich z.b.
    ComboBox_EQAItem und ComboBox_EQAUpgrade gewählt habe muss der Text lauten: $ci ComboBox_EQAItem(zweiter Eintrag) + 0 + ComboBox_EQAUpgrade

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

    Wadde mal, janz langsam. Formulier bitte nochmal stichpunktartig alle Bedingungen. Also z.B.
    • wenn in ComboBox1 0 ausgewählt ist und in ComboBox2 0, dann nimm als FinalText nur "$ci "
    • wenn in ComboBox1 0 ausgewählt ist und in ComboBox2 nicht 0, dann …
    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.

    VaporiZed schrieb:

    stichpunktartig alle Bedingungen
    1. ComboBox_EQAItem = $ci
    2. ComboBox_EQAItem + ComboBox_EQARarity = $ci ComboBox_EQAItem + ComboBox_EQARarity
    3. ComboBox_EQAItem + ComboBox_EQAUpgrade = $ci ComboBox_EQAItem + 0 + ComboBox_EQAUpgrade
    4. ComboBox_EQAItem + ComboBox_EQARarity + ComboBox_EQAUpgrade = ComboBox_EQAItem + ComboBox_EQARarity + ComboBox_EQAUpgrade
    und so soll der Lauf sein hab ich zum Beispiel alle 3 angewählt soll 4. in Kraft treten, mach ich dann z.B. Rarity auf 0 dann soll 3. in Kraft treten genauso wie mach ich Quality auf 0 dann soll 2. in Kraft treten und genauso bei 1. wenn nur EQAItem ausgewählt ist und/oder Rarity und Quality beide auf 0 sind.
    Argh, etwas wirr, wenn Du ohne ausreichend Punkt und Komma auflistest.
    Ich vermute mal, dass ComboBox_EQAUpgrade irgendwie mit Quality zusammenhängt.
    Aber wenn Du nun alle Bedingungen anscheinend hast, musst Du es erstmal nur noch in Code gießen. Kürzen kann man später.
    Also:

    VB.NET-Quellcode

    1. If ComboBox_EQARarity.SelectedItem.ToString = "0" AndAlso ComboBox_EQAUpgrade.SelectedItem.ToString = "0" Then
    2. 'Erste Komplex-Bedingung erfülltung
    3. ElseIf ComboBox_EQARarity.SelectedItem.ToString <> "0" AndAlso ComboBox_EQAUpgrade.SelectedItem.ToString = "0" Then
    4. 'Zweite Bedingung erfüllt
    5. 'usw …


    Anmerkung:
    Der Unterschied zwischen And und AndAlso/Or und OrElse
    Bevor Du weitermachst, bitte die empfohlenen VS-Einstellungen verwenden.
    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.
    Der von mir gezeigte Code ist der, der ausgeführt werden sollte, wenn, tja … wenn eben sich was ändert. Also die ComboBox-Auswahlen (?) zum Beispiel. Also könnte das z.B. in ComboBox_EQAUpgrade_SelectedIndexChanged stehen. Und in den anderen ComboBox-Change-Subs. Und der logische nächste Schritt ist natürlich, sowas dann in eine eigenen Sub auszulagern und in den …_SelectedIndexChanged-Subs jene neue Sub nur noch aufzurufen, damit Du nicht 5x den gleichen Code stehen hast.
    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.

    VaporiZed schrieb:

    ausgeführt werden sollte


    VB.NET-Quellcode

    1. If ComboBox_EQARarity.SelectedItem.ToString = "0" AndAlso ComboBox_EQAUpgrade.SelectedItem.ToString = "0" Then
    2. TextBox_EQACommand.Text = "$ci " + EQAAdventurer(ComboBox_EQAItem.SelectedIndex)
    3. ElseIf ComboBox_EQARarity.SelectedItem.ToString <> "0" AndAlso ComboBox_EQAUpgrade.SelectedItem.ToString = "0" Then
    4. TextBox_EQACommand.Text = "$ci " + EQAAdventurer(ComboBox_EQAItem.SelectedIndex)
    5. End If


    Also mit dem Code kann ich irgendwie nichts machen RadioButton funktioniert -> lädt die Liste ganz normal egal in welcher ComboBox ich was auswähle kommt:
    System.NullReferenceException: "Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt."

    System.Windows.Forms.ComboBox.SelectedItem.get hat Nothing zurückgegeben.
    Dementsprechend geht es jetzt um die Codeverfeinerung. V.a. bzgl. der Programm- und Ablauflogik. Was soll passieren, wenn kein Item in den ComboBoxen gewählt wurde?
    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.