Problem mit Listbox

  • VB.NET

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von Der_Chris.

    Problem mit Listbox

    Hallo an alle,
    ich hoffe sehr Ihr könnt mir helfen.
    Ich habe mit Visual Studio 2012 ein kleines Programm zur Steuerung einer Cocktailmaschine geschrieben. Jedoch wenn ich jetzt die an eine XML gebundenen Einträge in der Listbox durchgehe bzw nur ein anderen Eintrag wähle hängt sich das Programm fast komplett auf. Ich kann dann noch weiter in der Listbox wählen aber alles andere wie nur das Programm beenden ist nicht mehr möglich!? Evtl. hat ja jemand damit Erfahrungen gemacht.

    Der_Chris schrieb:

    Evtl. hat ja jemand damit Erfahrungen gemacht.
    Wenn Du uns Deinen Code postest?
    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!
    Aber Natürlich, hier mal das IndexChanged der Listbox:

    Quellcode

    1. Private Sub ListBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListBox1.SelectedIndexChanged
    2. cls_ausgabe.AusgabeText()
    3. End Sub


    Und die Klasse welche alle Textboxen Einträge in eine Textbox schreibt:

    Brainfuck-Quellcode

    1. Public Class Datenbank_Ausgabe
    2. Public Sub AusgabeText()
    3. Main.tbAusgabe.Clear()
    4. Main.tbAusgabe.Text = "Zutaten" & vbTab & vbTab & "Menge"
    5. Main.tbAusgabe.Text = Main.tbAusgabe.Text & vbNewLine
    6. '-----------------------------------------------------------
    7. If Main.Apricot_BrandyTextBox.TextLength > 0 Then
    8. Main.tbAusgabe.Text = Main.tbAusgabe.Text & vbCrLf & "Apricot Brandy: " & vbTab & Main.Apricot_BrandyTextBox.Text & "cl."
    9. End If
    10. '-----------------------------------------------------------
    11. If Main.BacardiTextBox.TextLength > 0 Then
    12. Main.tbAusgabe.Text = Main.tbAusgabe.Text & vbCrLf & "Bacardi: " & vbTab & vbTab & Main.BacardiTextBox.Text & "cl."
    13. End If
    14. '-----------------------------------------------------------
    15. If Main.Blue_CuracaoTextBox.TextLength > 0 Then
    16. Main.tbAusgabe.Text = Main.tbAusgabe.Text & vbCrLf & "Blue Curacao: " & vbTab & Main.Blue_CuracaoTextBox.Text & "cl."
    17. End If
    18. '-----------------------------------------------------------
    19. If Main.CachacaTextBox.TextLength > 0 Then
    20. Main.tbAusgabe.Text = Main.tbAusgabe.Text & vbCrLf & "Cachaca: " & vbTab & vbTab & Main.CachacaTextBox.Text & "cl."
    21. End If
    22. '-----------------------------------------------------------
    23. If Main.GinTextBox.TextLength > 0 Then
    24. Main.tbAusgabe.Text = Main.tbAusgabe.Text & vbCrLf & "Gin: " & vbTab & vbTab & Main.GinTextBox.Text & "cl."
    25. End If
    26. '-----------------------------------------------------------
    27. If Main.MalibuTextBox.TextLength > 0 Then
    28. Main.tbAusgabe.Text = Main.tbAusgabe.Text & vbCrLf & "Malibu: " & vbTab & vbTab & Main.MalibuTextBox.Text & "cl."
    29. End If
    30. '-----------------------------------------------------------
    31. If Main.OrangenlikörTextBox.TextLength > 0 Then
    32. Main.tbAusgabe.Text = Main.tbAusgabe.Text & vbCrLf & "Orangenlikör: " & vbTab & Main.OrangenlikörTextBox.Text & "cl."
    33. End If
    34. '-----------------------------------------------------------
    35. If Main.Rum_weißTextBox.TextLength > 0 Then
    36. Main.tbAusgabe.Text = Main.tbAusgabe.Text & vbCrLf & "Rum: " & vbTab & vbTab & Main.Rum_weißTextBox.Text & "cl."
    37. End If
    38. '-----------------------------------------------------------
    39. If Main.TequilaTextBox.TextLength > 0 Then
    40. Main.tbAusgabe.Text = Main.tbAusgabe.Text & vbCrLf & "Tequila: " & vbTab & vbTab & Main.TequilaTextBox.Text & "cl."
    41. End If
    42. '-----------------------------------------------------------
    43. If Main.WodkaTextBox.TextLength > 0 Then
    44. Main.tbAusgabe.Text = Main.tbAusgabe.Text & vbCrLf & "Wodka: " & vbTab & vbTab & Main.WodkaTextBox.Text & "cl."
    45. End If
    46. '-----------------------------------------------------------
    47. If Main.AnanassaftTextBox.TextLength > 0 Then
    48. Main.tbAusgabe.Text = Main.tbAusgabe.Text & vbCrLf & "Ananassaft: " & vbTab & Main.AnanassaftTextBox.Text & "cl."
    49. End If
    50. '-----------------------------------------------------------
    51. If Main.GrenadineTextBox.TextLength > 0 Then
    52. Main.tbAusgabe.Text = Main.tbAusgabe.Text & vbCrLf & "Grenadine: " & vbTab & Main.GrenadineTextBox.Text & "cl."
    53. End If
    54. '-----------------------------------------------------------
    55. If Main.MaracujasaftTextBox.TextLength > 0 Then
    56. Main.tbAusgabe.Text = Main.tbAusgabe.Text & vbCrLf & "Maracujasaft: " & vbTab & Main.MaracujasaftTextBox.Text & "cl."
    57. End If
    58. '-----------------------------------------------------------
    59. If Main.OrangensaftTextBox.TextLength > 0 Then
    60. Main.tbAusgabe.Text = Main.tbAusgabe.Text & vbCrLf & "Orangensaft: " & vbTab & Main.OrangensaftTextBox.Text & "cl."
    61. End If
    62. '-----------------------------------------------------------
    63. If Main.ZitronensaftTextBox.TextLength > 0 Then
    64. Main.tbAusgabe.Text = Main.tbAusgabe.Text & vbCrLf & "Zitronensaft: " & vbTab & Main.ZitronensaftTextBox.Text & "cl."
    65. End If
    66. '-----------------------------------------------------------
    67. If Main.SahneTextBox.TextLength > 0 Then
    68. Main.tbAusgabe.Text = Main.tbAusgabe.Text & vbCrLf & "Sahne: " & vbTab & vbTab & Main.SahneTextBox.Text & "cl."
    69. End If
    70. '-----------------------------------------------------------
    71. If Main.ZusätzlichTextBox.TextLength > 0 Then
    72. Main.tbAusgabe.Text = Main.tbAusgabe.Text & vbCrLf & vbNewLine & "Zusätzlich: " & vbNewLine & Main.ZusätzlichTextBox.Text
    73. End If
    74. '-----------------------------------------------------------
    75. If Main.AlkoholgehaltTextBox.TextLength > 0 Then
    76. Main.tbAusgabe.Text = Main.tbAusgabe.Text & vbCrLf & vbNewLine & "Alkoholgehalt: " & vbTab & vbTab & Main.AlkoholgehaltTextBox.Text & " % Vol."
    77. Else
    78. Main.tbAusgabe.Text = Main.tbAusgabe.Text & vbCrLf & vbNewLine & "Alkoholgehalt:" & vbTab & vbTab & "0,0 % Vol."
    79. End If
    80. End Sub
    81. End Class


    Ich denke das ist alles oder braucht Ihr noch mehr?
    Wie greift deine Klasse "Datenbank_Ausgabe" auf Form "Main" zu, wenn sie das Objekt gar nicht hat?
    Du musst bei der Ausgabe-Funktion die Form mit übergeben (mit Me, natürlich auch Übergabeparameter definieren).

    Ansonsten verstehe ich nicht wirklich, wie deine Listbox in der "AusgabeText" überhaupt eingebunden ist... Woher weißt du, was ausgewählt wurde, bzw. wie nutzt du dieses Wissen?
    Von den Klassen, dei Du verwendest, musst Du zunächst mit New eine Instanz anlegen:

    VB.NET-Quellcode

    1. Private cls_Ausgabe As New Datenbank_Ausgabe
    Oder war dieser Code nur nicht dabei?
    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!
    Also im anhängten Bild seht Ihr das Fenster bei welchem das Problem ensteht.

    Ich wähle in der Listbox einen Cocktail aus, die jeweiligen Zutaten werden dann in einzelnen Textboxen(hinter der Listbox) geladen. Mit der cls_ausgabe werden diese einzelnen Textboxen eingelesen und an die Main.tbausgabe zurückgegeben.
    Damit man eine Übersicht von den Zutaten hat.
    Natürlich habe ich eine Instanz für die Klasse angelegt. Soll ich evtl. mal den Quelltext der ganzen Main hochladen?
    Bilder
    • Cocktail GUI.PNG

      41,33 kB, 795×591, 97 mal angesehen
    Und was hast du an die Textboxen angebunden (und wozu? Wenn du die Daten hast, dann kannst du sie direkt verwenden, wozu Umweg über Textboxen)? Woher bekommen die einzelnen Textboxen ihre Daten? Woher weiß das Programm, dass der Eintrag jetzt in die Brandy-Textbox soll und nicht in die andere?

    Vielleicht schaust du dir das an:

    [VB.NET] Daten laden, speichern, verarbeiten - einfachste Variante

    [VB.NET] die vier Views auf Video
    Die Textboxen bekommen Ihre Daten aus einem Dataset. In der habe ich eine Tabelle mit den Zutaten und dem jeweiligen Namen des Cocktails. Habe die Textboxen direkt aus Datenquelle hier hin geschoben. Ich würde natürlich auch direkt die jeweiligen Zutaten aus der XML Datei in die eine Textbox einlesen wenn ich wüsste wie das geht!?
    Andersrum: du brauchst überhaupt keine Textboxen, deine Daten liegen doch alle schon vor. Du bindest die Ausgabetextbox einfach an die entsprechende Bindingssource.

    Poste mal das Bild von deinem Dataset (du hast es hoffentlich im DataSet-Designer gemacht?).
    Ähm, was ist das?

    Du brauchst 2 Tabellen, eine "Coctail" mit Spalten "ID", "Name", "Alkoholgehalt" und eine "Zutat" mit "ID", "Name", "Menge". Diese befinden sich in einer N:M-Relation, ein Coctail hat mehrere Zutaten, ein Zutat kann zu mehreren Coctails gehören, also brauchst du noch eine Zwischentabelle zur Verteilung.
    Dann werden die Datensätze gefüllt.

    Schau doch oben im Post#10 verlinkte Videos an, da hat @ErfinderDesRades alles sehr gut erklärt.