Mit einer Trackbar 3 weitere Nacheinander Füllen

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 17 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Mit einer Trackbar 3 weitere Nacheinander Füllen

    Hallo liebe Community :) ,
    meine Frage ist ja bereits im Titel.

    Ich möchte mit einer Trackbar 3 weitere Nacheinander Füllen.
    Also erst die Erste, wenn die Voll ist dann die Zweite usw.

    Hab halt das Problem, dass es dann über das Maximum hinaus geht. (OutOfRange Exception).

    l.G. Revenant
    Das war der Code des ersten Versuches(nur die sub):

    VB.NET-Quellcode

    1. Sub Fill()
    2. If (TrackBar1.Value = 9) Then
    3. If (TrackBar2.Value = 9) Then
    4. If (TrackBar3.Value = 9) Then
    5. Else
    6. TrackBar3.Value = TrackBar4.Value * 3
    7. End If
    8. Else
    9. TrackBar2.Value = TrackBar4.Value * 3
    10. End If
    11. Else
    12. TrackBar1.Value = TrackBar4.Value * 3
    13. End If
    14. End Sub


    Hatte halt das Problem dass es immer über die MAXvalue ging.

    Vermutlich ist der Fehler für andere Offensichtlich, nur nicht für mich :(

    l.G. Revenant
    naja mit dem Code den du oben gepostet hast, setzt du ja einen 3 fach so hohen Prozentwert , also wenn Bar 4 z.B. auf 100 % steht versuchst du den anderen Bars 300 % zuzuweisen.
    Was genau soll denn erreicht werden, das alle den 3fachen wert kriegen, aber bis zu einem Max von 100 ?
    dann z.B.

    VB.NET-Quellcode

    1. Sub Fill()
    2. If Trackbar4.Value * 3 >= 100 Then
    3. trackbar1.Value = 100
    4. Trackbar2.Value = 100
    5. Trackbar3.Value = 100
    6. Else
    7. trackbar1.Value = CInt(Math.Round((Trackbar4.Value * 3), 0))
    8. Trackbar2.Value = CInt(Math.Round((Trackbar4.Value * 3), 0))
    9. Trackbar3.Value = CInt(Math.Round((Trackbar4.Value * 3), 0))
    10. End If
    11. End Sub

    oder aber das alle bars immer den gleichen Wert haben ?
    also z.B.

    VB.NET-Quellcode

    1. Sub Fill()
    2. trackbar1.Value = Trackbar4.Value
    3. Trackbar2.Value = Trackbar4.Value
    4. Trackbar3.Value = Trackbar4.Value
    5. End Sub
    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If

    n7revenant schrieb:

    Hab halt das Problem, dass es dann über das Maximum hinaus geht.
    Im Prinzip willst Du so was wie ein Dezimalsystem auf TrackBars abbilden.
    Wenn es zum Überlauf kommt, muss die überlaufende Bar auf 0 gehen und die nächste inkrementiert werden.
    Wenn die ebenfalls überlaufen will, geht sie ebenfalls auf 0 und die nächste wird inkrementiert.
    Wenn Du dies verstanden hast und genau so implementierst, biste feddich. :thumbsup:
    Da musst Du nur noch die Anzahl der TrackBars vorgeben.
    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!

    n7revenant schrieb:

    Danke!
    Würdest Du bitte mal Deinen Coe posten für den Fall, dass noch jemand dieses Problem hat?
    ==================

    asusdk schrieb:

    oder aber das alle bars immer den gleichen Wert haben ?
    Was sollte das für einen Zweck haben, 3 TrackBars identisch zu haben, da brauchst Du auch nur eine.
    Unsinnigerweise von @n7revenant mit Hilfreich geadelt. :/
    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!
    Was sollte das für einen Zweck haben, 3 TrackBars identisch zu haben, da brauchst Du auch nur eine.


    Deswegen hatte ich ja gefragt was er denn will, da es zumindest für mich nicht ersichtlich ist, was genau er denn erreichen will
    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If
    Ich möchte erreichen dass 3 Trackbars (oder auch Progressbars) sozusagen jeweils ein drittel des wertes der 4ten Trackbbar darstellen, und diese nacheinander gefüllt werden.
    Natürlich abhängig davon, wie hoch der Wert der 4ten Trackbar ist.

    Als hätte man einen fetten Eimer Wasser, und wollte damit 3 kleine nacheinander füllen.

    l.G. Revenant
    @n7revenant AHa, nun wird das klar, auch wenn es nicht unbedingt sinnvoll ist.
    Nimm den Code von @asusdk und teile den Wert durch 3 und fasse die Redundanz zusammen:

    VB.NET-Quellcode

    1. Sub Fill()
    2. Dim val = Trackbar4.Value \ 3
    3. If val >= 100 Then
    4. trackbar1.Value = 100
    5. Trackbar2.Value = 100
    6. Trackbar3.Value = 100
    7. Else
    8. trackbar1.Value = val
    9. Trackbar2.Value = val
    10. Trackbar3.Value = val
    11. End If
    12. End Sub

    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!
    @RodFromGermany das ist fast das was ich suche, nur das Problem dass sich alle Gleichzeitig und nur zu 30% Füllen.

    Ich habs hier nochmal mit ein paar Zeilen versucht. Zeigt vllt. besser was ich meine;

    VB.NET-Quellcode

    1. Sub Fill3()
    2. If (TrackBar4.Value >= 3) Then
    3. TrackBar1.Value = 10
    4. If (TrackBar4.Value >= 6) Then
    5. TrackBar2.Value = 10
    6. If (TrackBar4.Value >= 6) Then
    7. TrackBar3.Value = CInt(Math.Round(TrackBar4.Value * 3, 0))
    8. End If
    9. ElseIf (TrackBar4.Value <= 6) Then
    10. If (TrackBar4.Value >= 3) Then
    11. TrackBar2.Value = CInt(Math.Round(TrackBar4.Value * 3, 0))
    12. End If
    13. End If
    14. ElseIf (ProgressBar4.Value <= 3) Then
    15. TrackBar1.Value = CInt(Math.Round(TrackBar4.Value * 3, 0))
    16. End If
    17. End Sub



    l.G. Revenant

    n7revenant schrieb:

    Zeigt vllt. besser was ich meine;
    Eher nicht, es knallt sogar.
    Schreib verbal auf, was die Bars machen, wenn die anderen wo sind.
    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!
    @VB1963 So was hag ich mal zusammengebaut.
    @n7revenant
    Probier mal dies hier:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    3. TrackBar1.Maximum = 30 - 1
    4. TrackBar2.Maximum = 30 - 1
    5. TrackBar3.Maximum = 30 - 1
    6. TrackBar4.Maximum = 90 - 1 ' durch 3 teilbar - 1
    7. End Sub
    8. Private Sub TrackBar4_Scroll(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TrackBar4.Scroll
    9. Dim range = TrackBar4.Maximum \ 3 ' auf 3 Bars verteilen
    10. Dim part = TrackBar4.Value \ (TrackBar1.Maximum + 1)
    11. Dim act = TrackBar4.Value Mod (TrackBar1.Maximum + 1)
    12. Select Case part
    13. Case 0
    14. TrackBar1.Value = act
    15. TrackBar2.Value = 0
    16. TrackBar3.Value = 0
    17. Case 1
    18. TrackBar1.Value = range
    19. TrackBar2.Value = act
    20. TrackBar3.Value = 0
    21. Case 2
    22. TrackBar1.Value = range
    23. TrackBar2.Value = range
    24. TrackBar3.Value = act
    25. End Select
    26. End Sub
    27. End Class

    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!

    jvbsl schrieb:

    eleganter
    Klar.
    Ich hab mir auch gaaaanz viel Mühe gegeben, einen Code zu schreiben, den n7revenant verstehen kann. ;)
    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!