Listbox Form2 Backgroundcolor

  • VB.NET

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

    Listbox Form2 Backgroundcolor

    Hey.
    Vorweg: Ich arbeite heute den zweiten Tag mit VB. Bin also auf dem Gebiet noch relativ unerfahren.
    Aber ich habe ein Problem (Gesucht bei google und hier in den Foren. Sollte ich was übersehen haben, vergebt mir).
    Nun zu meinem Problem:

    Ich habe 2 Forms. In Form 1 habe ich eine Listbox. In die Listbox habe ich Grün, Blau, Weiß etc. geschrieben.
    Nun möchte ich, dass wenn ich in der Listbox eine Farbe auswähle, dass diese die Hintergrundfarbe für Form2 (besser noch für ein Panel auf Form 2) wird.

    Wenn ihr wisst wie es geht und mir helfen könnt, bitte tut es :)

    VB.NET-Quellcode

    1. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    2. ListBox1.Items.Add("Rot")
    3. ListBox1.Items.Add("Weiß")
    4. ListBox1.Items.Add("Blau")
    5. End Sub
    6. Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
    7. If ListBox1.SelectedIndex <> -1 Then 'ein item muss gewählt sein, ist keins gewählt ist .SelectedIndex = -1
    8. Select Case ListBox1.SelectedItem
    9. Case "Rot"
    10. Me.BackColor = Color.Red
    11. Case "Weiß"
    12. Me.BackColor = Color.White
    13. Case "Blau"
    14. Me.BackColor = Color.Blue
    15. End Select
    16. End If
    17. End Sub


    das ist allerdings recht unsauber, veränderst du einen "farbnamen" funktioniert das ganze nciht mehr. bei größeren projekten oder komplexeren aufgaben sollte das ganze anders gelöst werden.. aber so lernt man wenigstens ein paar funktionen besser kennen^^ lg

    um den farbwert des panels auf der 2. form zu ändern musst du statt "me" z.b. "Form2.Panel1.BackColor = Color.Red" verwenden
    du kannst dir aussuchen wie du die listbox füllst. entweder über code ODER über den designer. wenn du beides machst steht dementsprechend auch alles doppelt drin. Ich verstehe nur nicht warum die listbox leer ist wenn du das ganze im desinger rausnimmst, zur programmlaufzeit (also wenn du das programm startest) wird die listbox doch vom code gefüllt?!?

    ich weiß zwar nicht was du vorhast aber das hier könnte für dich auch noch sehr interessant sein:

    VB.NET-Quellcode

    1. With New ColorDialog 'ein neuer ColorDialog wird deklariert und ist inerhalb des with-blocks gültig
    2. .Color = Me.BackColor 'die im dialog vorausgewählte farbe im dialog wird festgelegt (ist nicht relevant, aber benutzerfreundlicher)
    3. If .ShowDialog = Windows.Forms.DialogResult.OK Then 'der dialog wird angezeigt, es wird geprüft ob der benutzer auf "OK" drückt (oder abbrechen)
    4. Me.BackColor = .Color 'drückt er auf "OK" dann ist die hintergrundfarbe gleich der im dialog gewählten farbe
    5. End If
    6. End With
    Okay, das Problem hat sich erledigt. Habs im Designer gelöscht und dann stand im Designer Textbox1. aber beim Debuggen wars dann alles okay.
    Hatte mich da verwirren lassen :)
    Aber ich hab da noch ne Frage:

    Ich muss das in der Listbox auswählen. Geht das nicht auch irgendwie so, das der das nimmt, was da gerade steht?
    Weil der nimmt das nur, wenn die farbe angeklickt ist. :/
    wie meinst du das? das automatisch eine farbe gewählt wird?

    du kannst mittels code ein item in der listbox wählen:
    ListBox1.SelectedIndex = 1

    wichtig: die listbox ist nullbasierend, d.h. wie bei einem array hat das erste item den index 0
    um fehlern zur laufzeit entgegenzuwirken solltest du immer vor so einem befehl prüfen ob die listbox auch über ein item mit dem entsprechenden index verfügt:

    if index < listbox1.items.count then
    ...
    end if
    Versteh ich nicht.

    Nochmal zu dem Problem:

    Ich habe eine Listbox. Wenn ich da nichts anklicke passiert nichts und die Farbe bleibt so, wie sie ist.
    Ich möchte aber, dass auch wenn ich nichts anklicke, dass dann die Farbe genommen wird, die gerade zu sehen ist in der Listbox.
    Also angenommen, ich lasse die Listbox wie sie ist und darin steht "rot". wenn ich dann auf "start" klicke, hat Form2 den standard-Hintergrund und nicht rot.
    Und auch wenn man die Pfeiltasten der Listbox benutzt, wird der Text in der Listbox nicht vorgehoben und der nimmt den nicht.
    Erst wenn man den anklickt, wird der ja blau hinterlegt und dann auch genommen.
    Soll aber so sein, dass die Farbe genommen wird, die gerade in der Listbox zu sehen ist genommen wird ( halt ohne anklicken zu müssen).

    VB.NET-Quellcode

    1. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    2. ListBox1.Items.Add("Rot")
    3. ListBox1.Items.Add("Weiß")
    4. ListBox1.Items.Add("Blau")
    5. ListBox1.SelectedIndex = 0 'in diesem fall "rot"
    6. End Sub
    7. Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
    8. If ListBox1.SelectedIndex <> -1 Then 'ein item muss gewählt sein, ist keins gewählt ist .SelectedIndex = -1
    9. Select Case ListBox1.SelectedItem
    10. Case "Rot"
    11. Me.BackColor = Color.Red
    12. Case "Weiß"
    13. Me.BackColor = Color.White
    14. Case "Blau"
    15. Me.BackColor = Color.Blue
    16. End Select
    17. End If
    18. End Sub



    also bei mir funktioniert das ganze, auch mit pfeiltasten.. standartmäßig wird die erste farbe in der liste gewählt
    Schonmal gut, den zusatz in Zeile 7 hatte ich nicht.

    Aber ich meine ja nicht die Tastaturpfeiltasten, sondern die hoch und runter tasten an der Listbox. Die die man mit der maus benutzt. ;)

    Denn wenn ich da hoch und runter drücke, wird die Farbe die dann da steht nicht ausgewählt ( blau hinterlegt), sondern es ist immernoch die davor (rot) blau markiert und ausgewählt.
    den code in zeile 7 hab ich dir in dem vorherigen post aber "gezeigt". ich will ja, dass du auch was lernst^^

    aber nun zu deiner frage, deine listbox ist also "zu klein" um alle items anzuzeigen und desswegen sind da an der seite diese scrollbuttons? also mir ist kein event bekannt mitdem man abfragen kann ob darauf geklickt wurde... ich habe also keine lösung parat, sry

    sieh dir aber mal das DomainUpDown control an, funktioniert ansich genauso, unterstützt allerdings das geforderte
    Ja danke :) habs aber im 2ten post dann besser anhand der "bildlichen erklärung" verstanden, was damit gemeint war.

    Meine Listbox ist nicht zu klein. die ist halt so, dass immer nur eine farbe angezeigt wird. das sollte auch so sein. damit man da auwählen kann. nur das mit den scrollbuttons funktioniert nicht.

    Habs mit DomainUpdown versucht, das funktioniert irgendwie gar nicht ;/
    naja, deine listbox soll ja mal mindestens 3 farbennamen anzeigen, wenn nur maximal einer sichtbar ist, ist die listbox offensichtlich zu klein xD
    noch dazu ist es dann nicht mehr sinnvoll auf eine listbox zurückzugreifen sonder das domainupdown control zu verwenden. der code ändert sich eigentlich garnicht, die namen der events sind etwas anders:

    VB.NET-Quellcode

    1. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    2. DomainUpDown1.Items.Add("Rot")
    3. DomainUpDown1.Items.Add("Weiß")
    4. DomainUpDown1.Items.Add("Blau")
    5. DomainUpDown1.SelectedIndex = 0
    6. End Sub
    7. Private Sub DomainUpDown1_SelectedItemChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DomainUpDown1.SelectedItemChanged
    8. If DomainUpDown1.SelectedIndex <> -1 Then
    9. Select Case DomainUpDown1.SelectedItem
    10. Case "Rot"
    11. Me.BackColor = Color.Red
    12. Case "Weiß"
    13. Me.BackColor = Color.White
    14. Case "Blau"
    15. Me.BackColor = Color.Blue
    16. End Select
    17. End If
    18. End Sub
    Super. Spitze. Danke

    Funktioniert jetzt alles wunderbar :)
    Hatte mich schon ans ändern der events und namen gemacht. leider waren mir dabei ein paar kleine fehler unterlaufen.

    Nochmal zur Listbox - die sollte ja so klein, dass immer nur 1 farbe zu sehen war. und mit den pfeiltastetn der listbox konnte man ja dann die farbe auswählen ;) eh egal, weils nun geht mit domainupdown

    Vielen Dank für die Hilfe ! :)
    kein problem^^

    du hast sozusagend die listbox als domainupdown control missbraucht, konntest aber nicht auf funktionen zugreifen die das geeignetere control bereitstellt^^ unglaublich xD

    der vorteil einer listbox ist, dass man viele items einsehen kann und dann schnell und gezielt eins oder mehrere auswählen kann. bei dem domainupdowncontrol hingegen kann immer nur eins eingesehen werden. das ist dann auch gleichzeitig das aktuell gewählte.. also genau das was du brauchst^^