Zufallsfarbe generieren

  • VB.NET

Es gibt 22 Antworten in diesem Thema. Der letzte Beitrag () ist von exc-jdbi.

    Zufallsfarbe generieren

    Moin

    Wie kann ich eine Zufallsfarbe generieren?

    Ich möchte dass sich die Hintergrundfarbe meiner Form, immer wenn der Timer abgelaufen ist, ändert.
    Es soll halt immer eine Zufallsfarbe generiert werden und die Form soll dann diese Hintergrundfarbe haben.

    Wie man die Hintergrundfarbe der Form ändert weiss ich, aber wie erstellt man einen Generator der Zufallsfarben generiert?
    My-Image-Upload.de | Dein kostenloser unlimitierter Bilderhoster


    Bitte lesen bevor ihr unnötige Sachen posted: [VB 2008] wie log ich in diese seite ein? ... DANKE!
    Mach dir doch eine Liste mit Farben.

    Dann such dir eine Zufallszahl raus und nimm die Farbe die an dieser Stelle steht.
    @patrick.m der Thread ist ~7 Jahre alt. Evtl. lieber nen neuen eröffnen als alte wieder ausgraben...

    Du möchtest, das zufällig Rot/Blau/Grün/Gelb gewählt wird?

    - Mach dir ne List(Of Color) lstFarben
    - füge alle Farben die per Zufall gewählt werden ein -> z.B. lstFarben.Add(Color.Blue)
    - über die Random Klasse mit r.Next(0, lstFarben.Count) eine Farbe zufällig ermitteln
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Ohne Code kann ich dir irgendwie nicht weiter helfen. Mach doch nen eigenen Thread auf der hier ist schon uralt.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    oder mit einer Dictionary in etwa so

    VB.NET-Quellcode

    1. Option Strict On
    2. Option Explicit On
    3. Imports System.Drawing
    4. Module Module1
    5. Sub Main()
    6. Dim dicColor = GetColorDict()
    7. Dim red As Color = Nothing
    8. Dim green As Color = Nothing
    9. dicColor.TryGetValue("Red", red)
    10. dicColor.TryGetValue("Green", green)
    11. Stop
    12. End Sub
    13. Function GetColorDict() As Dictionary(Of String, Color)
    14. Dim dic As New Dictionary(Of String, Color)
    15. For Each c As KnownColor In [Enum].GetValues(GetType(KnownColor))
    16. dic.Add([Enum].GetName(GetType(KnownColor), c), Color.FromKnownColor(c))
    17. Next
    18. Return dic
    19. End Function
    20. End Module


    Die Farben die du dann zufällig willst, würde ich in eine Stringarray/ListofT ablegen und dan nzufällig auf einen entsprenden Index zugreifen und diese namen dann für die Dictionary nutzen.

    Freundliche Grüsse

    exc-jdbi

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „exc-jdbi“ ()

    So in etwa

    VB.NET-Quellcode

    1. 'Als Klassenvariable deklarieren
    2. Dim rnd As New Random
    3. Dim farblist As New List(Of Color)
    4. 'Kommt in die Sub
    5. farblist.Add(Color.Red)
    6. farblist.Add(Color.Blue)
    7. farblist.Add(Color.Green)
    8. farblist.Add(Color.Yellow)
    9. Dim zufall As Integer = rnd.Next(0, farblist.Count)
    10. MessageBox.Show(farblist.Item(zufall).ToString)
    Hier könnte meine Signatur stehen.
    @patrick.m Das was @mox geschrieben hat, ist was ich dir beschrieben hatte. Würde ich so machen.

    @exc-jdbi seine Variante beinhaltet keinen Zufallsmechanismus und ist mit Kanonen auf Spatzen geschossen. Zudem für Anfänger vermutlich zu kompliziert.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Ja das weiss ich, aber so muss/kann man sich nur noch auf die Zufallswerte konzentrieren.

    @patrick.m
    Leg dir wie ich oben beschrieben habe eine z.B. ListOf String an.
    In dieser Liste setzt du die Farben die du willst, also Red, Green, Blue, Grau etc. in dem sie du dazu-Addest.

    Je nach dem ob du eine Liste mit den zufälligen Farben willst oder nur eine Farbe, gibst du eine Liste/Variable bekannt. Ich geh mal davon aus, dass du eine Liste nimmst.

    Definiere die Anzahl der zufälligen Farbe als Integer.

    Erstell dir eine temporäre Color-Variable, für die For-Schleife.

    Hol dir die oben erwähnte Dictionary mit der Function GetColorDict() (siehe Beitrag #12)

    Bilde eine For Schleife in etwa so

    VB.NET-Quellcode

    1. Dim r As Integer 'Zufallszahl
    2. For i As Integer = 0 To AnzahlColor - 1
    3. 'Zufallszahl holen
    4. r = rnd.Next(colorList.Count)
    5. 'Die entsprechende Farbe holen aus dem Dictionary und in die temporäre Datei legen
    6. dicColor.TryGetValue(colorList(r), colTemp)
    7. 'In deiner Zufallsliste hinzufügen
    8. RndColorList.Add(colTemp)
    9. Next


    Das war's.

    Edit:
    Es geht sogar noch einfacher ohne Dictionary

    VB.NET-Quellcode

    1. For i As Integer = 0 To AnzahlColor - 1
    2. RndColorList.Add(Color.FromName(colorList(rnd.Next(colorList.Count))))
    3. Next


    Freundliche Grüsse

    exc-jdbi

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „exc-jdbi“ ()

    @exc-jdbi Dein Beispiel ist alles andere als einfach, fehleranfälliger und schwerer wartbar.

    Zudem hast du immer noch keine Möglichkeit aufgezeigt um an die zufällig generierte Farbe zu kommen. Du fügst lediglich Zufallsfarben in eine weitere Liste, hast also das Problem bzw. die Anforderung weiterhin nicht gelöst.

    exc-jdbi schrieb:

    Es geht sogar noch einfacher ohne Dictionary


    Korrekt. So wie @mox bereits geschrieben hat und ich vorgeschlagen habe wäre die einfachere Variante.

    Der Aufruf um einem z.B. Panel eine Farbe zu verpassen wäre dann mit dem Code von mox:

    Panel.BackColor = farblist.Item(rnd.Next(0, farblist.Count))

    6 Zeilen um die Liste mit Farben zu versehen sowie die Random Klasse zu instanziieren. 1 Zeile um eine zufällige Farbe zu erhalten.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Es muss nicht einmal eine List mit den Colors gemacht werden. Es geht auch so

    VB.NET-Quellcode

    1. Dim rnd As New Random
    2. 'Diese Liste kann beliebig erweitert werden!
    3. Dim colorList As New List(Of String) From {"Red", "Green", "Blue", "Gray", "Violet", "White"}
    4. Me.BackColor = Color.FromName(colorList(rnd.Next(colorList.Count)))


    3 Zeilen :D

    Freundiche Grüsse

    exc-jdbi
    @exc-jdbi Ok, lass ich gelten. Kriegst einen Gummipunkt :)

    Edit: Wobei String halt der falsche Datentyp ist. Mach das wie du es geschrieben hast, statt mit strings, mit Color.X dann ist das sauber ;)
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen

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

    Ist wohl Geschmacksache.

    Die Shared Funktion FromName ist genau für solche Zugriffe mit dem Namen (der für mich geläufiger ist) gedacht. Will man hingegen die deutsche Bezeichnung nehmen, muss es wiederum ein bisschen anders gemacht werden.

    Freundliche Grüsse

    exc-jdbi
    Hmm - Also mein Geschmack bevorzugt immer die strenge typisierung - "string-smells" suche ich zu vermeiden:

    VB.NET-Quellcode

    1. 'Diese Liste kann beliebig erweitert werden!
    2. Dim colorList As Color() = {Color.Red, Color.Green, Color.Blue, Color.Gray, Color.Violet, Color.White}
    3. Dim rnd As New Random
    4. Private Sub ChangeColor()
    5. Me.BackColor = colorList(rnd.Next(colorList.Count))
    6. End Sub