Performclick der Ausdruck ergibt keinen Wert

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

Es gibt 29 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Visual_Prog schrieb:

    Fehler
    Was ist das Ziel dieser Konstruktion?
    Beschreibe was das tun soll und wir machen das richtig.
    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!

    VB.NET-Quellcode

    1. Private Sub Add_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Button4.PerformClick()
    3. System.IO.File.WriteAllLines(combiendPathneu, leerelist, New System.Text.UnicodeEncoding()
    4. End Sub


    Ziel ist es, einen virtuellen Buttonclick zu erzeugen. Also innerhalb eines normalen Buttonclicks einen neuen Buttonclick zu generieren.
    Das virtuelles Buttonclick soll dann

    VB.NET-Quellcode

    1. System.IO.File.WriteAllLines(combiendPathneu, leerelist, New System.Text.UnicodeEncoding()

    zum laufen bringen
    einen ButtonClick kann nur der Maustreiber des Systems generieren.
    Oder definiere "ButtonClick".


    Noch besser: Beschreibe das Ziel des ganzen, unter Verwendung klar definierter Fachworte, wie: Event, Methode, aufrufen, Befehl, ausführen, etc.

    Verwende keine undefinierten Begriffe wie "ButtonClick", "virtueller ButtonClick", "neuer ButtonClick", "normaler ButtonClick", sowie "zum Laufen bringen".
    System.IO.File.WriteAllLines() ist nichts, was man zum Laufen bringt, sondern das kann man aufrufen, nämlich weils eine Methode ist.
    Okay also das von vorhin hat sich sogar geklärt, nun habe ich aber grade folgendes Problem:

    Es ist ein Label vorhanden mit dem Text "Uebersicht". Der Text dieses labels ändert sich jedoch ständig.
    Nun möchte ich den Text des labels jedes mal bei einer änderung in einer list of string speichern.

    etwa so :

    VB.NET-Quellcode

    1. Dim list_label As New List(Of String)
    2. For each label.text.änderung
    3. list_label.add(new label.text)
    4. next


    Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „Visual_Prog“ ()

    Bis zum Zufügen eines Listbox-Items kann ich folgen, aber dann kommen wieder Worte, die in meiner Welt keinen Sinn ergeben.

    Was bedeutet "das hinzugefuegte Item soll in dieser Datei überschreibend und variable(entsprechend den label1.text)gespeichert werden" ?

    Deine Code-Schnipsel sagen mir auch nix - steht das in irgendeiner Methode, wie heißt die, und was soll die tun?

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

    Visual_Prog schrieb:

    Nun möchte ich den Text des labels jedes mal bei einer änderung in einer list of string speichern.
    Offensichtlich änderst Du ja selbst den Text des Labels.
    Ändere nicht den Text selbst, sondern den Wert einer Property, in der Du das Label updatest und Deine List befüllst.

    VB.NET-Quellcode

    1. Private LabelTexte As New List(Of String)
    2. Public Property LabelText() As String
    3. Get
    4. Return Me.Label1.Text
    5. End Get
    6. Set(value As String)
    7. Me.Label1.Text = value
    8. Me.LabelTexte.Add(value)
    9. End Set
    10. End Property
    Nun musst Du nur noch dafür sorgen, dass alle Deine direkten Label1.Text-Zugriffe durch den Property-Zugriff ersetrzt werden.
    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!
    Okay vielen Dank soweit. Hintergrund der Frage ist, ich habe eine ListBox mit einem schriftlichen Titel (Label).
    Wenn ich ein Listboxitem clicke, wird die ListBox gecleared und der labeltext ändert sich in den Namen des angeklickten Items.

    Nun suche ich einen Weg, wie ich mit einem "Zurück-Button" das vorherige Menü der ListBox laden kann.

    Es kann nämlich sein, dass ich vom ersten Listbox-Menü ins zweite schwirre und dann vom zweiten ins dritte.

    Ich hoffe das war verständlich erklärt, sonst bitte fragen : /

    Meine Idee war gewesen, diese "Menü" Änderung durch die Änderung der labeltexte zu kennzeichnen.
    Das heißt die Labeltexte in einer list of string zu speichern und jedem hinzugekommenen eintrag in der List in eine zahl also integer zu übersetzen.
    Dadurch dass dann der Verlauf in Zahlen gespeichert ist, könnte ich dann dem Button signalisieren, immer erst die listbox der vorherigen zahl zu laden.

    Nur weiss ich nicht ob ich das hier gut formuliert habe und ob das so umsetzbar ist oder evtl auf anderer Weise..
    nun stelle ich mir etwas vor wie eine "BreadCrumb-Navigation".
    Der WinExplorer hat sowas, wenn man sich links den Treeview wegdenkt, und rechts das Listview als deine Listbox ansieht.
    Und oben ist ja die "BreadCrumb" - die Zeile, die den Pfad zum aktuell angezeigten Ordner angibt.
    Und mit dieser Zeile kann man auch zurück-navigieren in dem aktuellen Ordner übergeordnete Ordner.
    Aber die BreadCrumb-Zeile ist kein Label, sondern eher eine Liste mit Buttons.
    Könnte man auch als dynamisches Menü umsetzen, oder als LinkLabel - jdfs nicht ein normales Label.

    Also dassis jetzt nur ein Interpretations-Versuch deiner Aussagen, der mir iwie Sinn ergäbe - keine Ahnung, inwieweit das trifft, was du meinst.

    Visual_Prog schrieb:

    Nun suche ich einen Weg ...
    Poste bitte zunächst die vollständige Problembeschreibung / Aufgabenstellung.
    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!
    @Erfinderdes Rades ja genauu das meine ich.

    Soo also ich habe das jetzt so gelöst, dass ich einfach 5 Label erstellt habe.
    Jede ListBox "Dimension" wurde einfach durch die Label.Text der 5 verschiedenen Label definiert.

    Also z.b. die erste ListBoxseite:

    VB.NET-Quellcode

    1. If Label1.Text = "Uebersicht" And Label2.Text = "Label2" And Label3.Text = "Label3" And Label4.Text = "Label4" And Label5.Text = "Label5" Then .....


    -ich clicke auf die listBox.selecteditem und dadurch ändert sich Label2
    -für die zweite habe ich dann:

    VB.NET-Quellcode

    1. ElseIf Label1.Text = "Uebersicht" And Not Label2.Text = "Label2" And Label3.Text = "Label3" And Label4.Text = "Label4" And Label5.Text = "Label5" Then.....


    Für die fünfte schließlich:

    VB.NET-Quellcode

    1. ElseIf Label1.Text = "Uebersicht" And Not Label2.Text = "Label2" And Not Label3.Text = "Label3" And Not Label4.Text = "Label4" And Label5.Text = "Label5" Then.....



    Frage wäre jetzt z.B., wie man z.b. so etwas für unendlich viele "ListBoxDimensionen" programieren könnte, da ich mir für diese fünf Dimensionen nun schon die finger Wund schreiben musste

    @RoadFromGermany werde es evtl. ausführlicher Erläutern, aber im Kurzform geht es um eine Art Navigator.
    Es lässt sich ein wenig mit dem Windows Navigator vergleichen.
    Nur wenn du z.b. einen item im Treeview clickst, wird das neue Menue im Treeview selbst geladen. Es werden nur txt Dateien gehandelt. Auf der rechten Seiten hast du dann eine TextBox, die den text des selektierten Items anzeigt. Im treeview soll es möglich sein, neue ListBoxitems hinzuzufügen. Diese sind dann beim doppeltclicken entsprechend selbst neue Listübersichten.

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

    Visual_Prog schrieb:

    VB.NET-Quellcode

    1. If Label1.Text = "Uebersicht" And Label2.Text = "Label2" And Label3.Text = "Label3" And Label4.Text = "Label4" And Label5.Text = "Label5" Then
    Trenen Daten und GUI.
    Nimm nicht den Text-Inhalt von Controls, um Deine Zustände zu speichern.
    Ändere den Inhalt von Zustandsvariablen und gib dementsprechende Texte in Deinen Controls aus.
    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!

    Visual_Prog schrieb:

    Frage wäre jetzt z.B., wie man z.b. so etwas für unendlich viele "ListBoxDimensionen" programieren könnte, da ich mir für diese fünf Dimensionen nun schon die finger Wund schreiben musste
    Naja - es ist eine Navigation in einer baumartigen Datenstruktur, also brauchst du eine baumartige Datenstruktur.
    Das einfachste wäre sowas:

    VB.NET-Quellcode

    1. public class Node
    2. public property Text As String
    3. public property Childs As new List(Of Node)
    4. End Class

    Davon müsstest du eine Liste anlegen, und in den Childs ebenfalls Nodes einfüllen und soweiter.

    Weil solange du keine Datenbestand hast, der baumartig strukturiert ist, solange kannst du auch keine Navigation durch einen baumartigen Datenbestand entwickeln.

    Programmchen

    Also ich stelle da Programmchen mal vor, falls das jemandem interessiert und auch in der Hoffnung, die eine oder andere Kleinigkeit noch zu verbessern. Mit diesen Programmchen habt ihr eine Navigationsleiste, mit der Ihr beliebig txt Einträge erstellen, umschreiben und lesen könnt.

    UNter dem Code ist die Benutzeroberfläche als Bild zu finden.

    Links ist die ListBox als treeview und Rechts die TextBox, diedie Texte anzeigt. Zur ListBox können Dateien hinzugefügt und entfernt werden.

    Es gibt einen SpeicherPfad für die ListBoxen und einen für die TextBoxtexte.

    @ErfinderDesRades + RoadFromGermany: das was ich im obigen Post meinte und was mit Node gelöst werden soll steht bei zeile 46 - 61 sowie 121-129

    Code:

    VB.NET-Quellcode

    1. Public Class Form1
    2. 'Übersicht der Lb Laden
    3. Private Sub Form_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    4. If System.IO.File.Exists("C:\xxx\LBoxen\Uebersicht.txt") Then
    5. ListBox1.Items.AddRange(System.IO.File.ReadAllLines("C:\xxx\LBoxen\Uebersicht.txt"))
    6. Else
    7. MessageBox.Show("Datei nicht vorhanden", "Wo ist die Datei??")
    8. End If
    9. End Sub
    10. Private Sub Add_Click(sender As Object, e As EventArgs) Handles Button1.Click
    11. Dim list_ As New List(Of String)
    12. Dim leerelist As New List(Of String)
    13. Dim LSi As String = Label1.Text
    14. Dim LSa As String = Label2.Text
    15. Dim LSe As String = Label3.Text
    16. Dim LSo As String = Label4.Text
    17. Dim LSu As String = Label5.Text
    18. Dim PfadLB As String = "C:\xxx\Uebersicht\LBoxen\"
    19. Dim combinedPathLB = IO.Path.Combine(PfadLB, String.Concat(LSi, ".txt"))
    20. Dim combinedPathLB1 = IO.Path.Combine(PfadLB, String.Concat(LSa, ".txt"))
    21. Dim combinedPathLB2 = IO.Path.Combine(PfadLB, String.Concat(LSe, ".txt"))
    22. Dim combinedPathLB3 = IO.Path.Combine(PfadLB, String.Concat(LSo, ".txt"))
    23. Dim combinedPathLB4 = IO.Path.Combine(PfadLB, String.Concat(LSu, ".txt"))
    24. Dim lsee As String = TextBox1.Text
    25. Dim Pfadneu As String = "C:\xxx\Uebersicht\LBoxen\"
    26. Dim combinedPathneu = IO.Path.Combine(Pfadneu, String.Concat(lsee, ".txt"))
    27. Dim list_2 As New List(Of String)
    28. Dim leer As String = ""
    29. list_2.Add(leer)
    30. ListBox1.Items.Add(TextBox1.Text) ' is klar
    31. list_.Clear() 'List clearen wegen Speicherprobleme hinterher
    32. For i = 0 To ListBox1.Items.Count - 1
    33. list_.Add(CStr(ListBox1.Items(i))) 'List auffüllen mit LB.Items
    34. Next
    35. If Label1.Text = "Uebersicht" And Label2.Text = "Label2" And Label3.Text = "Label3" And Label4.Text = "Label4" And Label5.Text = "Label5" Then
    36. System.IO.File.WriteAllLines(combinedPathLB, list_, New System.Text.UnicodeEncoding()) 'neuer Eintrag in die geklickte datei speichern schreiben
    37. ElseIf Label1.Text = "Uebersicht" And Label3.Text = "Label3" And Label4.Text = "Label4" And Label5.Text = "Label5" Then
    38. System.IO.File.WriteAllLines(combinedPathLB1, list_, New System.Text.UnicodeEncoding())
    39. ElseIf Label1.Text = "Uebersicht" And Not Label2.Text = "Label2" And Label4.Text = "Label4" And Label5.Text = "Label5" Then
    40. System.IO.File.WriteAllLines(combinedPathLB2, list_, New System.Text.UnicodeEncoding())
    41. ElseIf Label1.Text = "Uebersicht" And Not Label2.Text = "Label2" And Not Label3.Text = "Label3" And Label5.Text = "Label5" Then
    42. System.IO.File.WriteAllLines(combinedPathLB3, list_, New System.Text.UnicodeEncoding())
    43. ElseIf Label1.Text = "Uebersicht" And Not Label2.Text = "Label2" And Not Label3.Text = "Label3" And Not Label4.Text = "Label4" Then
    44. System.IO.File.WriteAllLines(combinedPathLB4, list_2, New System.Text.UnicodeEncoding())
    45. End If
    46. System.IO.File.WriteAllText(combinedPathneu, "", New System.Text.UnicodeEncoding()) ' neuen Eintrag als eigene LB Speichern
    47. TextBox1.Text = ""
    48. End Sub
    49. Private Sub Zurueck_Click(sender As Object, e As EventArgs) Handles Button3.Click
    50. Dim list_ As New List(Of String)
    51. Dim LSi As String = Label1.Text
    52. Dim Pfad As String = "xxx\Uebersicht\LBoxen\"
    53. Dim combinedPath = IO.Path.Combine(Pfad, String.Concat(LSi, ".txt"))
    54. Label1.Text = "Uebersicht"
    55. Label2.Text = "Label2"
    56. Label3.Text = "Label3"
    57. Label4.Text = "Label4"
    58. Label5.Text = "Label5"
    59. Label2.Visible = False
    60. Label3.Visible = False
    61. Label4.Visible = False
    62. Label5.Visible = False
    63. Button3.Visible = False
    64. ListBox1.Items.Clear()
    65. list_.Clear()
    66. ListBox1.Items.AddRange(System.IO.File.ReadAllLines("xxx\Uebersicht\LBoxen\" & LSi & ".txt"))
    67. End Sub
    68. Private Sub Save_Click(sender As Object, e As EventArgs) Handles Button2.Click
    69. Dim list_ As New List(Of String)
    70. Dim LSI As String = ListBox1.SelectedItem
    71. Dim Pfad As String = "C:\xxx\Uebersicht\"
    72. Dim combinedPath = IO.Path.Combine(Pfad, String.Concat(LSI, ".txt"))
    73. Dim TB2 As String = TextBox2.Text
    74. System.IO.File.WriteAllText(combinedPath, TB2, New System.Text.UnicodeEncoding())
    75. End Sub
    76. Private Sub ListBox1_Click(sender As Object, e As EventArgs) Handles ListBox1.Click
    77. TextBox2.Visible = True
    78. End Sub
    79. Private Sub ListBox1_DoubleClick(sender As Object, e As EventArgs) Handles ListBox1.DoubleClick
    80. Dim minivariable As String = ListBox1.SelectedItem()
    81. 'Labels verschoenern
    82. If Label2.Text = "Label2" Then
    83. Label2.Visible = True
    84. ElseIf Label3.Text = "Label3" Then
    85. Label3.Visible = True
    86. ElseIf Label4.Text = "Label4" Then
    87. Label4.Visible = True
    88. ElseIf Label5.Text = "Label5" Then
    89. Label5.Visible = True
    90. End If
    91. If Label1.Text = "Uebersicht" And Label2.Text = "Label2" And Label3.Text = "Label3" And Label4.Text = "Label4" And Label5.Text = "Label5" Then
    92. Label2.Text = minivariable
    93. ElseIf Label1.Text = "Uebersicht" And Not Label2.Text = "Label2" And Label3.Text = "Label3" And Label4.Text = "Label4" And Label5.Text = "Label5" Then
    94. Label3.Text = minivariable
    95. ElseIf Label1.Text = "Uebersicht" And Not Label2.Text = "Label2" And Not Label3.Text = "Label3" And Label4.Text = "Label4" And Label5.Text = "Label5" Then
    96. Label4.Text = minivariable
    97. ElseIf Label1.Text = "Uebersicht" And Not Label2.Text = "Label2" And Not Label3.Text = "Label3" And Not Label4.Text = "Label4" And Label5.Text = "Label5" Then
    98. Label5.Text = minivariable
    99. End If
    100. ListBox1.Items.Clear()
    101. Button3.Visible = True
    102. TextBox2.Visible = True
    103. ListBox1.Items.AddRange(System.IO.File.ReadAllLines("C:\xxx\Uebersicht\LBoxen\" & minivariable & ".txt"))
    104. 'ListBoxEintrag von der ListBox UND System entfernen
    105. Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
    106. Dim lsi As String = ListBox1.SelectedItem
    107. Dim Pfad As String = "C:\xxx\Uebersicht\LBoxen\"
    108. Dim combinedPath = IO.Path.Combine(Pfad, String.Concat(lsi, ".txt"))
    109. Dim lse As String = ListBox1.SelectedItem
    110. Dim Pfat As String = "C:\xxx\Uebersicht\"
    111. Dim combinedPath2 = System.IO.Path.Combine(Pfat, String.Concat(lse, ".txt"))
    112. Select Case MsgBox("Soll die Datei " & lsi & " wirklich gelöscht werden?", MsgBoxStyle.YesNo, "Meldung")
    113. Case MsgBoxResult.Yes
    114. System.IO.File.Delete(combinedPath)
    115. System.IO.File.Delete(combinedPath2)
    116. ListBox1.Items.Remove(ListBox1.SelectedItem())
    117. Case MsgBoxResult.No
    118. End Select
    119. End Sub
    120. End Class

    Dateien

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Visual_Prog“ ()

    Visual_Prog schrieb:

    RoadFromGermany
    Nix Straße. :D
    Verstehe zunächst

    RodFromGermany schrieb:

    Trenen Daten und GUI.
    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 : D

    Trenen Daten und GUI: Ich Tippe jetzt mal darauf, du meinst ich soll Aenderungen im Code nicht von Steuerelementen aus der benutzeroberfläche abhängig machen? So gesehen muesste ich mir ein neues System ausdenken, z.b. Node, was ich aber noch nicht ausreichend kenne : /

    Zu Zustaende geschweige Zustaende speichern habe ich leider nichts gefunden. Hat das irgendwas mit Boolean zu tun? sonst tippe ich da leider auch im dunkeln.

    Entsprechend weiss ich auch nicht, wie man eine zustandsvariable definiert ; /

    Gruss

    Visual_Prog schrieb:

    Hat das irgendwas mit Boolean zu tun?
    CheckBox wäre Boolean.

    Visual_Prog schrieb:

    VB.NET-Quellcode

    1. If Label1.Text = "Uebersicht" And Label2.Text = "Label2" And Label3.Text = "Label3" And Label4.Text = "Label4" And Label5.Text = "Label5" Then
    Du fragst den Inhalt von Labels ab. Iwie werden die Labels doch befüllt, und nicht per Tastatur.
    Dort musst Du entsprechende Variablen generieren.
    Das sieht eher nach einem Enum aus, äquivalent wäre eine ComboBox, eine Eins von N-Auswahl.
    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!
    @ ErfinderDesRades:

    kann ich den Code denn erstmal so uebernehmen?

    VB.NET-Quellcode

    1. public class Node
    2. public property Text As String
    3. public property Childs As new List(Of Node)
    4. End Class


    die List of Node befuellen:
    Childs.add() ???

    Und kann ich den obigen Code einfach so im anderen Code einsetzen?

    Ich weiss da grad nicht weiter : /