Farbe vom Rectangle ändert mit TrackBarr

  • VB.NET

Es gibt 21 Antworten in diesem Thema. Der letzte Beitrag () ist von Holywarrior1.

    Farbe vom Rectangle ändert mit TrackBarr

    Hallo liebe Programmierer/in,

    ich möchte mithilfe einer TrackBar die Farbe vom Rectangle ändern. Weiß allerdings nicht wie ich das machen soll. Hab es schon geschafft, die Farbe vom Background der Form zu ändern, das wars auch schon.

    Bitte um Hilfe!

    Lg holywarrior1 :)
    Mir würde auf Anhib nur einfallen das du es so machst

    VB.NET-Quellcode

    1. Private Sub Farben()
    2. 'Hier die Farben deaklarieren hab jetzt keine Lust das zu machen. Aber es gibt ein Beispielt
    3. Trackbar1.value = 100 then Rectangle.Color = color.black
    4. Timer1 'also den Timer ansprechen oder wie du das auch immer machen willst
    5. Farben()


    Bitte unterlast überflüssige Kommentare zu meinem Beitrag das es flasch ist blabla es ist aber ne Lösung die vllt klappt das Außbessern könnt ihr übernehmen soll als Basis dienen (vllt gehts auch schon so)
    Die Idee ist ja gut und recht, aber würde es nicht mehr Sinn machen, mit RGB oder sowas zu arbeiten? Da haste dann auch gleich nen Integer.
    @FaKstone Ich habe die Anwendung des Timers nicht verstanden, was soll der bringen?
    #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 :!:
    Leider funzt das mit Rectangle.Color nicht, hab das nämlich schon versucht :D.
    Trotzdem cool von dir, dass du mir helfen wolltest. :D
    Hier der Code. Will halt, dass die Farbe vom Rectangle geändert wird, wenn man die Trackbar.Value erhöht.

    VB.NET-Quellcode

    1. Public Class frm_Test
    2. Dim Redd As Integer
    3. Dim Bluee As Integer
    4. Dim Greenn As Integer
    5. Dim G As Graphics
    6. Dim Stift As New Pen(Brushes.Red, 1)
    7. Private Sub tb_red_Scroll(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tb_red.Scroll
    8. lbl_red_zahl.Text = CStr(tb_red.Value)
    9. Redd = CInt(lbl_red_zahl.Text)
    10. Me.BackColor = Color.FromArgb(Redd, Bluee, Greenn)
    11. End Sub
    12. Private Sub tb_green_Scroll(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tb_green.Scroll
    13. lbl_green_zahl.Text = CStr(tb_green.Value)
    14. Greenn = CInt(lbl_green_zahl.Text)
    15. G = Color.FromArgb(Redd, Bluee, Greenn)
    16. End Sub
    17. Private Sub tb_blue_Scroll(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tb_blue.Scroll
    18. lbl_blue_zahl.Text = CStr(tb_blue.Value)
    19. Bluee = CInt(lbl_blue_zahl.Text)
    20. Me.BackColor = Color.FromArgb(Redd, Bluee, Greenn)
    21. End Sub
    22. Private Sub frm_Test_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    23. G = pic_zeichnen.CreateGraphics
    24. End Sub
    25. Private Sub cmd_rechteck_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd_rechteck.Click
    26. G.Clear(Color.White)
    27. G.DrawRectangle(Stift, 100, 100, 200, 200)
    28. End Sub
    29. Private Sub NumericUpDown1_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles nud_widthss.ValueChanged
    30. Stift.Width = nud_widthss.Value
    31. End Sub
    32. Private Sub cmd_ende_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd_ende.Click
    33. MessageBox.Show("Tolles Programm, oder? Bye!", "Bye-Bye", MessageBoxButtons.OK, MessageBoxIcon.Information)
    34. End
    35. End Sub
    36. End Class

    Was genau willst Du färben? Den Inhalt?
    Außerdem, wo ich den Code sehe: Hau bitte das CreateGraphics raus und arbeite im Paint-Event.
    #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 :!:
    Drei Trackbars: tb_R, tb_G, tb_B

    Quellcode

    1. Private Sub Update_Color(sender As Object, e As EventArgs) Handles tb_R.Scroll, tb_G.Scroll, tb_B.Scroll
    2. BackColor = Color.FromArgb(tb_R.Value, tb_G.Value, tb_B.Value)
    3. End Sub


    8| Warum weißt du Graphics ne Farbe zu? Außerdem verwendet man .ToString statt Cstr(), in deinem Fall. Und was veranstaltest du hier?:

    VB.NET-Quellcode

    1. lbl_red_zahl.Text = CStr(tb_red.Value)
    2. Redd = CInt(lbl_red_zahl.Text)

    Meinst du nicht dass es ein wenig umständlich ist den Text des Labels zu ändern um dann aus dem Label den Wert zu parsen (Was man übrigens mit Integer.Tryparse machen würde)? ;)


    Ich hab mal korregiert ;)

    VB.NET-Quellcode

    1. Public Class frm_Test
    2. Dim Red As Integer
    3. Dim Blue As Integer
    4. Dim Green As Integer
    5. Dim Stift As New Pen(Brushes.Red, 1)
    6. Private Sub tb_red_Scroll(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tb_red.Scroll, tb_green.Scroll, tb_blue.Scroll
    7. lbl_red_zahl.Text = tb_red.Value.ToString
    8. lbl_green_zahl.Text = tb_green.Value.ToString
    9. lbl_blue_zahl.Text = tb_blue.Value.ToString
    10. Red= tb_red.Value
    11. Green= tb_green.Value
    12. Blue= tb_blue.Value
    13. Me.BackColor = Color.FromArgb(Red, Blue, Green)
    14. End Sub
    15. Dim flag = false
    16. Sub Form_paint
    17. if flag then
    18. e.graphics.Clear(Color.White)
    19. e.graphics.DrawRectangle(Stift, 100, 100, 200, 200)
    20. flag = false
    21. end if
    22. End Sub
    23. Private Sub cmd_rechteck_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd_rechteck.Click
    24. flag = true
    25. Invalidate()
    26. End Sub
    27. Private Sub NumericUpDown1_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles nud_widthss.ValueChanged
    28. Stift.Width = nud_widthss.Value
    29. End Sub
    30. Private Sub cmd_ende_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd_ende.Click
    31. MessageBox.Show("Tolles Programm, oder? Bye!", "Bye-Bye", MessageBoxButtons.OK, MessageBoxIcon.Information)
    32. End
    33. End Sub
    34. End Class


    8-) faxe1008 8-)

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „faxe1008“ ()

    Was der Timer machen soll fragst du
    Sry das die Antwort so spät kommt

    Der Timmer soll das immer abfragen ich hab mal die Erfahrung gemacht das ich die Trackbar bewegen kann wie ich will und das sich dann nichts ändern so der Timer das der für das wechseln der Farbe sorgt

    Ich weiß ich kann geil erklären xDDDDD
    Hmpf, wenn Lehrer schon keine Ahnung haben.
    Die Form hat ein Paint-Event, da kannst Du ganz einfach Dir aus den PaintEventArgs mit e.Graphics das Graphics-Objekt holen, das Du normalerweise mit CreateGraphics erzeugst und damit dann arbeiten.

    @FaKstone Ähm, das ist der größte Ranz, den man machen kann. Das nennt sich Polling und bezeichnet das ständige Abfragen von Sachen via Timer. Wenn Du keine Ahnung hast, bitte einfach raus halten.
    Polling ist total unperformant, wurde Dir schon einmal gesagt und es gibt IMMER einen besseren Weg für sowas.
    In der Programmierung geht es nicht nur darum, dass etwas geht, sondern, dass es gut und performant läuft, ist auch ein wichtiger Aspekt.
    Und bevor ich mich totlache, weil ich gerade zu irgendsonem Ranz geraten habe, würde ich mir überlegen, es vielleicht besser zu machen.
    #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 :!:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private newFigur As New Figur
    3. Public Sub New()
    4. ' Dieser Aufruf ist für den Designer erforderlich.
    5. InitializeComponent()
    6. For Each item In Me.Controls.OfType(Of TrackBar)()
    7. AddHandler item.ValueChanged, AddressOf TrackbarValue_Changed
    8. item.Maximum = 255
    9. item.Value = 255
    10. Next
    11. newFigur.Body = New Rectangle(200, 200, 25, 25)
    12. ' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu.
    13. End Sub
    14. Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles Me.Paint
    15. Using sb As New SolidBrush(newFigur.Color)
    16. e.Graphics.FillRectangle(sb, newFigur.Body)
    17. End Using
    18. End Sub
    19. Private Sub TrackbarValue_Changed(sender As Object, e As EventArgs)
    20. newFigur.Color = Color.FromArgb(TrackBar1.Value, TrackBar2.Value, TrackBar3.Value, TrackBar4.Value)
    21. Me.Invalidate()
    22. End Sub
    23. End Class
    24. Public Class Figur
    25. Public Property Body As Rectangle
    26. Public Property Color As Color
    27. End Class



    Brauchst 4 Trackbar's (A-R-G-B)

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

    Nein, ist es eben nicht. Das ist keine Basis, sondern eine Sache, die man immer vermeiden sollte.
    #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 :!:
    bei mir hats bis jetzt so ganz gut funktioniert
    Aber kleine erleuterung wie ich Programmieren:
    1. Irgendwie was zum laufen bringen
    2. Fehler ausbessern
    3. Die Performanz beachten
    4. Entstandene Fehler ausbessern
    5. neue Basis schaffen
    6. entstandene Performanz einbauen

    FERTIG!!!!!

    Bei weiteren Fragen bitte per pn es gehört nicht zum Thema

    Und jetzt kommrs wieder.... Was das den für nen sch***
    Man sollte halt von Anfang an versuchen den effektivsten Weg zu gehen (solange er nicht, wie in diesem Fall, mit zuviel Aufwand verbunden ist).
    Also warum soll man jede Sekunde 10x schauen ob sich der Wert verändert hat, wenn man stattdessen von dem Steuerelement selbst mitgeteilt bekommt: Mein Wert wurde geändert und dementsprechend darauf reagieren kann.

    Es gibt für fast jede Art der Interaktion mit Steuerelementen ein entsprechendes Event welches abonniert werden kann und dementsprechend darauf geantwortet werden kann.

    FaKstone schrieb:

    Die Performanz beachten


    Ich bin mal gespannt, wie du die Performance im Nachhinein mit nem Timer verbessern willst, aber nun gut ...
    Nebenbei bemerkt ist es nicht schlimm, wenn man keine Ahnung von was hat, aber dann sollte man nicht aufs gerate wohl sein (Halb-)Wissen ins Forum schreiben, wo man andere Neulinge evtl. irritiert ;)

    Für den TE wäre es wohl am besten das Paint-Event zu wählen, dann gewöhnt man sich kein "falsches" Coden an.

    8-) faxe1008 8-)
    nocheinmal, zum mitschreiben:
    @RushDen hat dir ein sauberes Beispiel geliefert.
    Versuche das ans Laufen zu bringen.
    Versuche nicht irgendetwas anderes, jedenfalls nicht, bevor du Rushens Ansatz nicht umgesetzt hast.
    Kannst du Rushdens Ansatz nicht umsetzen, so wirst du vmtl. andere, selbstausgedachte Ansätze erst recht nicht umsetzen können.

    Etwa die Idee, einer Trackbar ein Grafikobjekt zuzuweisen ist so abwegig wie Wikipedia in einen Stiefel stecken zu wollen: Es geht nicht nur nicht, sondern es ergibt überhaupt keinen Sinn.