Listview Item einfärben

  • VB.NET

Es gibt 32 Antworten in diesem Thema. Der letzte Beitrag () ist von Twometer.

    Listview Item einfärben

    Hallo

    Ich würde gerne ein Selektiertes ListView item einfärben. ich habe es schon damit probiert:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Using dlg As New ColorDialog
    2. If work.ToString = "yellow" Then
    3. main.lstMain.SelectedItems(1).BackColor = Color.YellowGreen
    4. work = ""
    5. End If
    6. If important.ToString = "red" Then
    7. main.lstMain.SelectedItems(1).BackColor = Color.Red
    8. important = ""
    9. End If
    10. If privat.ToString = "green" Then
    11. main.lstMain.SelectedItems(1).BackColor = Color.Green
    12. privat = ""
    13. End If
    14. End Using


    Da hat sich aber garnichts getan. Kann mir jemand von euch helfen?
    Danke im Vorhinein
    LG Quellcoder
    Projekte
    Hi,
    Hast du dir mal angeguckt wie ein Array funktioniert? Du liest das 2. Item aus und nichz das 1. (Array ist 0-basiert). Probiers mal mit SelectedItems(0)
    LG
    Twometer
    //EDIT @Mokki er will doch die Farbbe, nicht das Bild???
    An Error 404 occurred while loading signature...
    Darf ich Fragen in welchem Event das passiert bzw. wo dein Code ausgeführt wird?
    Habe das gerade so wie verstanden probiert:

    ListView1 -> ItemSelectionChanged Event

    VB.NET-Quellcode

    1. If (e.IsSelected) Then
    2. e.Item.BackColor = Color.WhateverColorYouLike
    3. End If


    Fazit: Ändert Farbe wenn Element angeklickt.

    lg TehBasic
    @Quellcoder02 Wie wäre es, wenn Du auf DataGridView umsteigst, da hast Du ein DataGridViewCellStyle, da kannst Du jede Zelle nach Bedarf formatieren. Gugst Du hier.
    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!
    @Twometer ich habs auch mit 0 probiert ich war mir da nicht mehr ganz sicher
    @TehBasic ich habe eine extra klasse mit allen funktionen da hab ich das dann in eine Sub reingeschrieben und in meiner hauptform habe ich ein main menu mit den Items "Arbeit, Persönlich, Wichtig" wenn eines von denen gedrückt wird, wird in der funktionsklasse ein String zu gewiesen unter zb Work (für arbeit) und dann wird in der If im Sub geprüft ob unter dem Dim ein String ist und wenn ja dann wird das rotgefärbt.
    @RodFromGermany Ich finde LV's schöner auch wenn Datagridviews einfacher sind

    Das ist der komplette Code mit der Sub
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Shared work As String
    2. Public Shared privat As String
    3. Public Shared important As String
    4. Public Shared Sub container()
    5. Using dlg As New ColorDialog
    6. If work.ToString = "yellow" Then
    7. main.lstMain.SelectedItems(1).BackColor = Color.YellowGreen
    8. work = ""
    9. End If
    10. If important.ToString = "red" Then
    11. main.lstMain.SelectedItems(1).BackColor = Color.Red
    12. important = ""
    13. End If
    14. If privat.ToString = "green" Then
    15. main.lstMain.SelectedItems(1).BackColor = Color.Green
    16. privat = ""
    17. End If
    18. End Using
    19. End Sub


    Da wird einem Dim der String zugewiesen
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub MenuItem10_Click_1(sender As Object, e As EventArgs) Handles MenuItem10.Click
    2. fclass.work = "yellow"
    3. End Sub
    4. Private Sub MenuItem11_Click_1(sender As Object, e As EventArgs) Handles MenuItem11.Click
    5. fclass.important = "red"
    6. End Sub
    7. Private Sub MenuItem12_Click(sender As Object, e As EventArgs) Handles MenuItem12.Click
    8. fclass.privat = "green"
    9. End Sub
    Projekte
    Hi,
    und wo rufst du denn die Methode container() auf??
    Mach doch einen String den du ka color oder so nennst und dann machst du

    VB.NET-Quellcode

    1. Private Sub MenuItem10_Click_1(sender As Object, e As EventArgs) Handles MenuItem10.Click
    2. fclass.color = "yellow"
    3. fclass.container()
    4. End Sub
    5. Private Sub MenuItem11_Click_1(sender As Object, e As EventArgs) Handles MenuItem11.Click
    6. fclass.color = "red"
    7. fclass.container()
    8. End Sub
    9. Private Sub MenuItem12_Click(sender As Object, e As EventArgs) Handles MenuItem12.Click
    10. fclass.color = "green"
    11. fclass.container()
    12. End Sub


    und dann bei der container()-Methode sowas wie:

    VB.NET-Quellcode

    1. If color = "yellow" Then
    2. main.lstMain.SelectedItems(0).BackColor = Color.YellowGreen
    3. End If
    4. If color = "red" Then
    5. main.lstMain.SelectedItems(0).BackColor = Color.Red
    6. End If
    7. If color.ToString = "green" Then
    8. main.lstMain.SelectedItems(0).BackColor = Color.Green
    9. End If
    10. color=""

    Was natürlich am besten wäre, wäre direkt eine Color statt einem String zu übergeben, dann kannste dir das If-Geraffel sparen, dann machst du einfach

    VB.NET-Quellcode

    1. main.lstMain.SelectedItems(0).BackColor = selectedColor


    //Codes sind nich getestet...

    Hoffe, ich konnte dir helfen
    LG
    Twometer
    An Error 404 occurred while loading signature...
    Hi,
    Willst du sie in einer Datei speichern, sodass sie beim nächsten Start erhalten bleibt oder was willst du machen? Mit Farbe speichern kann vieles gemeint sein, also beschreib mir bitte etwas genauer was du machen willst

    LG
    Twometer
    An Error 404 occurred while loading signature...
    Hi,
    naja ich dachte du willst deine Farbe speichern. Haste dir den Link mal angeguckt? Damit geht das ohne dass du deine eigenen Dateien rumschieben musst, das übernimmt .NET dann für dich.
    LG
    Twometer
    An Error 404 occurred while loading signature...
    Hi,
    Wie werden denn deine Items gespeichert, ich muss schon mehr wissen, wenn ich dir helfen soll. Entweder du erklärst es mir oder du gibst mir den Code, aber einfach so kann ich dir das nicht sagen... Ich nehme an, dass du eine Datei hast in der du die Items speicherst aber keine 2. willst, in der du die Farben speichert? Wenn ja, dann schreib doch in deinem Format einfach dazu, welchen State das Item Hat (welche Farbe). Wenn nein musste mir mal Code schicken :P

    Lg
    Twometer
    An Error 404 occurred while loading signature...
    ja sorry
    ich speichere meine Items so:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Shared Sub ListViewSave(ByRef LstVw As ListView, ByVal Path As String)
    2. isSaved = True
    3. Dim ListViewContent As String = ""
    4. For I As Integer = 0 To LstVw.Items.Count - 1
    5. ListViewContent += LstVw.Items.Item(I).Text & "##"
    6. For Int As Integer = 0 To LstVw.Items.Item(I).SubItems().Count - 1
    7. ListViewContent += LstVw.Items.Item(I).SubItems(Int).Text & "##"
    8. Next
    9. ListViewContent += vbNewLine
    10. Next
    11. If System.IO.File.Exists(Pfad) Then
    12. System.IO.File.Delete(Pfad)
    13. End If
    14. System.IO.File.AppendAllText(Pfad, ListViewContent)
    15. End Sub


    und laden tu ich sie so:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Shared Sub ListViewLoad(ByRef LstVw As ListView, ByVal Path As String)
    2. Dim sLine As String
    3. Dim sItem() As String
    4. Dim ItemX As ListViewItem
    5. Dim IntCols As Integer
    6. IntCols = LstVw.Columns.Count
    7. If Not IO.File.Exists(Path) Then IO.File.Create(Path).Close()
    8. FileOpen(1, Pfad, OpenMode.Input)
    9. With LstVw.Items
    10. While Not EOF(1)
    11. sLine = LineInput(1)
    12. sItem = Split(sLine, "##")
    13. ItemX = .Add(sItem(0), sItem(1))
    14. For I = 2 To IntCols
    15. ItemX.SubItems.Add(sItem(I))
    16. Next I
    17. End While
    18. End With
    19. FileClose(1)
    20. End Sub


    Mir ist es egal ob ich eine zweite datei brauch oder nicht es soll funktionieren (bestenfalls ohne Datei) (oder noch besser das man die farbe gleich in den Functions dazuschreiben kann(es geht um eine Forecolor mittlerweile))
    Projekte
    Hi,
    die Save-Methode kannste wahrscheinlich irgendwie so machen:

    VB.NET-Quellcode

    1. Public Shared Sub ListViewSave(ByRef LstVw As ListView, ByVal Path As String)
    2. isSaved = True
    3. Dim ListViewContent As String = ""
    4. For I As Integer = 0 To LstVw.Items.Count - 1
    5. ListViewContent += LstVw.Items.Item(I).Text & "##"
    6. For Int As Integer = 0 To LstVw.Items.Item(I).SubItems().Count - 1
    7. ListViewContent += LstVw.Items.Item(I).SubItems(Int).Text & "##"
    8. Next
    9. ListViewContent += LstVw.Items(I).ForeColor.ToArgb().ToString() 'Int-Wert generieren
    10. ListViewContent += vbNewLine
    11. Next
    12. If System.IO.File.Exists(Pfad) Then
    13. System.IO.File.Delete(Pfad)
    14. End If
    15. System.IO.File.AppendAllText(Pfad, ListViewContent)
    16. End Sub




    Dann sieht das so aus:
    <Z1> Item##SubItem##SubItem##SubItem##SubItem##<Farbe als Int>
    <Z2> Item##SubItem##SubItem##SubItem##SubItem##<Farbe als Int>
    <Z2> Item##SubItem##SubItem##SubItem##SubItem##<Farbe als Int>

    ZUM AUSLESEN

    dann guckst du einfach ob das am ## gesplittete das letzte ist (einfach statt .Count - 1 machste .Count - 2 und dann nimmste mit .Last das letzte, dann haste es auch).Das letzte parst du mit Color.FromArgb() wieder eine Farbe daraus. Dann hast du die Farbe, die du mit der ForeColor-Eigenschaft auf das Item festlegen kannst

    LG
    Twometer
    An Error 404 occurred while loading signature...
    Hi,
    ich seh erst jetzt was ich für ein verpeiltes Deutsch geschrieben habe xD...
    Hier in VB

    VB.NET-Quellcode

    1. Public Shared Sub ListViewLoad(ByRef LstVw As ListView, ByVal Path As String)
    2. Dim sLine As String
    3. Dim sItem() As String
    4. Dim ItemX As ListViewItem
    5. Dim IntCols As Integer
    6. IntCols = LstVw.Columns.Count
    7. If Not IO.File.Exists(Path) Then IO.File.Create(Path).Close()
    8. FileOpen(1, Pfad, OpenMode.Input)
    9. With LstVw.Items
    10. While Not EOF(1)
    11. sLine = LineInput(1)
    12. sItem = Split(sLine, "##")
    13. ItemX = .Add(sItem(0), sItem(1))
    14. ItemX.ForeColor = Color.FromArgb(sItem.Last())
    15. For I = 2 To IntCols-1
    16. ItemX.SubItems.Add(sItem(I))
    17. Next I
    18. End While
    19. End With
    20. FileClose(1)
    21. End Sub


    Du musst einfach nur alle mit ## getrennten außer dem letzten zu Items machen und den Letzten Array-Eintrag als Farbe nehmen. Dann haste es gespeichert. Besser wäre eh du würdest XML statt deinem eigenen Format nehmen, das wäre einfacher aber ok...

    LG
    Twometer
    An Error 404 occurred while loading signature...