Einzelne Listbox Items

  • VB.NET

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

    Einzelne Listbox Items

    Hallo Leute,

    ja, jetzt muss ich nochmal einen Thread schreiben.
    Ich möchte eine Listbox, die bereits vorher mit bestimmten Items ausgefüllt ist. Der User soll, sobald er auf ein bestimmtes Item klickt, rechts daneben 1. einen anderen Screenshot sehen & einen anderen Code, den er easy kopieren kann.

    Nun die beiden Fragen:
    1. Wie kann ich im "Formbuilder" also in (!) Visual Studio die einzelnen Items auswählen (+ einfaches ändern des Screenshots & Codes?)
    2. Wie kann ich das Programm erkennen lassen, dass ich ein anderes Item angewählt habe und somit der Screenshot sich wechselt

    Zur Information: Das Programm wird ein VB.NET Theme Manager.

    Ich bedanke mich im Voraus.
    @RIPENCE Wo kommen die Bilder und Texte her, die da angezeigt werden sollen?
    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
    Diese würde ich selbst einsetzen - ich weiß, dass ist mega viel Arbeit. Die Listbox wird eigentlich nichts anderes wie ein TabControl, aber das sind massenhaft Themes.
    Ein Screenshot ist im Anhang mit dabei, evtl. versteht man es dann einfacher.
    Wenn man auf ein anderes Theme aus der Listbox klickt, dann soll es auch automatisch den Screenshot & den Code ändern.
    Bilder
    • Demo.PNG

      30,88 kB, 734×621, 163 mal angesehen

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

    @RIPENCE Wenn Du die Bilder generierst, nimm dann das richtige. In meinem Beispiel sind 3 Bilder in den Ressourcen drin:

    VB.NET-Quellcode

    1. Private Sub ListBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListBox1.SelectedIndexChanged
    2. Select Case ListBox1.SelectedIndex
    3. Case 0
    4. Me.PictureBox1.Image = My.Resources.Image1
    5. Me.RichTextBox1.Text = "Der 1. Text"
    6. Case 1
    7. Me.PictureBox1.Image = My.Resources.Image2
    8. Me.RichTextBox1.Text = "Der 2. Text"
    9. Case 2
    10. Me.PictureBox1.Image = My.Resources.Image3
    11. Me.RichTextBox1.Text = "Der 3. Text"
    12. End Select
    13. End Sub
    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!
    Oder eleganter als OOP über Databinding:

    VB.NET-Quellcode

    1. Imports System.ComponentModel
    2. Public Class Form1
    3. Private _bindingList As New BindingList(Of Theme)
    4. Private Sub Form1_Shown(sender As Object, e As EventArgs) Handles MyBase.Shown
    5. _bindingList.Add(New Theme With {.Description = "Theme 1", .Text = "Das ist Theme 1", .Image = Image.FromFile(IO.Path.Combine(Application.StartupPath, "image1.png"))})
    6. _bindingList.Add(New Theme With {.Description = "Theme 2", .Text = "Das ist Theme 2", .Image = Image.FromFile(IO.Path.Combine(Application.StartupPath, "image2.png"))})
    7. _bindingList.Add(New Theme With {.Description = "Theme 3", .Text = "Das ist Theme 3", .Image = Image.FromFile(IO.Path.Combine(Application.StartupPath, "image3.png"))})
    8. ListBox1.DataSource = _bindingList
    9. ListBox1.DisplayMember = "Description"
    10. End Sub
    11. Private Sub ListBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListBox1.SelectedIndexChanged
    12. SetInfos(DirectCast(ListBox1.SelectedItem, Theme))
    13. End Sub
    14. Private Sub SetInfos(theme As Theme)
    15. PictureBox1.Image = theme.Image
    16. TextBox1.Text = theme.Text
    17. End Sub
    18. End Class
    19. Public Class Theme
    20. Public Property Description As String
    21. Public Property Text As String
    22. Public Property Image As Image
    23. End Class


    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten

    Pasta schrieb:

    Du willst doch nicht etwa alle Them-Daten hardcoden !?!

    Wie meinst Du das :D?
    Ich ziehe mir Bilder aus dem Internet und den Sourcecode dazu auch. Sobald jemand bei der Listbox auf ein Theme klickt, wird das dazugehörige mit dem Sourcecode angezeigt. ^^
    Genaueres kannst Du im Screenshot oben ansehen.
    Warum kein flexibles System, wo Du die Daten aus einer Datei lädst? Dann kann man das einfacher erweitern, ohne das ganze Programm aktualisieren zu müssen. Außerdem würde ich wirklich auf eine eigene Klasse, die diese Themes repräsentiert, zurückgreifen.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

    Trade schrieb:

    Warum kein flexibles System, wo Du die Daten aus einer Datei lädst?
    Genau das habe ich :D!
    Ich habe 197 ( :saint: ) Dateien (.png & .txt) - je ein Bild & der zugehörige SourceCode dazu.
    Oder verstehe ich das gerade falsch..?

    RIPENCE schrieb:

    Wie meinst Du das :D?

    Folgendes hört sich ein bißchen so an:

    RIPENCE schrieb:

    ..... dass es jede menge an Themes ist, kann ich einfach alles kopieren.
    Wieviele Themes es sind, sollte für den code, vollkommen unerheblich sein !

    Ich würde auch zu dem Ansatz von fichz raten !
    fichz hatte, wie ich das meinte, einfach eine Klasse erstellt, die ein Theme repräsentiert. Entsprechend kann man dann ein Enumerable davon z. B. serialisieren und spart sich hunderte Dateien. Man hat dann eben alles in einer und kann flexibel daraus wieder Objekte erzeugen. Somit kannste auch, wie er, DataBinding benutzen.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    @RIPENCE Da musst Du ein hartes Ordnungsprinzip realisieren:
    Gib Bild- und Textdatei eines Themas denselben Namen. Diesen kannst Du dann auch in der ListBox anzeigen.
    Nimm beim Einlesen nur Themen auf, für die es sowohl eine Bild- als auch eine Textdatei gibt.
    Wenn auf ein Item geklickt wird, werden die Pfade zusammengesetzt und die Dateien geladen.
    Das sieht dann z.B. so aus:

    VB.NET-Quellcode

    1. Private Path As String = "C:\Temp\TestThema\"
    2. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    3. Dim bilder = IO.Directory.GetFiles(Path, "*.jpg").ToList()
    4. Dim Texte = IO.Directory.GetFiles(Path, "*.txt").ToList()
    5. For Each bild In bilder
    6. Dim textVonBild = IO.Path.ChangeExtension(bild, ".txt")
    7. If Texte.Contains(textVonBild) Then
    8. Dim xx = IO.Path.GetFileNameWithoutExtension(textVonBild)
    9. Me.ListBox1.Items.Add(xx)
    10. End If
    11. Next
    12. End Sub
    13. Private Sub ListBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListBox1.SelectedIndexChanged
    14. Dim name = ListBox1.SelectedItem.ToString()
    15. Dim bild = Path & name & ".jpg"
    16. Dim text = Path & name & ".txt"
    17. Me.PictureBox1.ImageLocation = bild
    18. Me.RichTextBox1.LoadFile(text, RichTextBoxStreamType.PlainText)
    19. End Sub
    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!
    @RIPENCE Du musst aufpassen und ggf. alle Pfade in Kleinschrift konvertieren. Teste dies explizit.
    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!