Farbe annehmen²

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von eragon276.

    Farbe annehmen²

    Ich habe den ganzen Thread geändert.

    Also ich will das die Label1.Forecolor mit der Backgroundcolor von Form1 abgeglichen wird. Daher lese ich die Label1.ARGB und die Form1.ARBG werte aus.

    Ich habe das ganze in eine While schleife gesetzt und will den effekt ausführen lassen. Jedoch gleicht er nach jedem Farbwechsel die farbe nicht ab sondern arbeitet alles durch und gibt dann die farbe weiter... Also werden die RGB (Rot Grün Blau) Anteile nicht nach und anch sondern ->Voll -> Nicht verändert. Was ist der Fehler ? Hoffe ich könnt mir helfen

    Alles ist in einem Module in einer Public Function geschrieben daher seht ihr die Deklariation der einzelnen Farbanzeile (RGB) nicht. Da ich sie schon bei starten der Function von der Form1 übergebe.


    VB.NET-Quellcode

    1. Dim ok As Integer = 0
    2. While ok = 0
    3. 'Hier werden die Farben abgeglichen wenn zuhoch dann - Wenn du niedrig dann + sonst Nichts
    4. If r > rr Then
    5. rr += i
    6. ElseIf r < rr Then
    7. rr -= i
    8. End If
    9. If g > gg Then
    10. gg += i
    11. ElseIf g < gg Then
    12. gg -= i
    13. End If
    14. If b > bb Then
    15. bb += i
    16. ElseIf b < bb Then
    17. bb -= i
    18. End If
    19. 'Hier bekommt das Label die Farbe
    20. Form1.Label1.ForeColor = Color.FromArgb(0, r, g, b)
    21. 'Wenn die Label & Form1backgroundcolor übereinstimmen unterbrich die While-schleife
    22. If gg = g Then
    23. If rr = r Then
    24. If bb = b Then
    25. ok = 1
    26. End If
    27. End If
    28. End If
    29. 'Mach eine kleine pause das mit der Effekt besser wirkt
    30. Threading.Thread.Sleep(10)
    31. End While





    Vielen Dank im voraus

    Mfg Eragon

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „eragon276“ ()

    Pack das ganze in eine Timer_Clock-Prozedur, da haben die Controls Zeit, sich upzudaten.
    Form1.Label1.ForeColor geht schief, Du musst auf die richtige Instanz zugreifen (mit Me) übergeben oder in Form1 direkt laufen lassen).
    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!
    @eragon276:
    Folgendes Dilemma:
    Dein Hauptthread ist für das Zeichnen der Form, der Controls, usw. zuständig. Führst du jetzt eine große Berechnung durch (den Farbverlauf nehm ich mal als Berechnung), ist der Thread damit beschäftigt, und kommt nicht dazu, dein Control neu zu zeichnen (neu zeichnen = mit neuer Farbe zeichnen). Deshalb sollte man solche Sachen nicht im Mainthread erledigen.

    Ich habe mal hier ein Beispiel gepostet. Dieses arbeitet mit einem Thread, damit die Form während des Farbübergangs noch reagiert.
    anfangs habe ich es auch in einem timer in form1 gehabt jedoch war mir das trotz interval 1 zu langsam. habe dann den wert I hochgeschraubt also der dafür verantworlich ist wie viele RGB werte sich pro tick verändern jedoch habe ich dann das problem wenn ich i dann auf 2 stelle nicht jeder wert erreicht werden kann


    Beispiel

    Label1 - Form1 RGB
    R = 4 - R = 33
    G = 10 - G = 42
    B = 202 - B = 12

    dann ackert der timer sich zu tode weil er den wert R von 4 -> 32 nicht mit +/-2 anstellen kann...

    habt ihr noch andere ideen