Create UserControl - Trackbar

  • Allgemein

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

    Create UserControl - Trackbar

    Hallo liebe Community,
    ich arbeite gerade an meiner MetroControl - Library,
    und will nun eine Trackbar einfügen.
    Das Design soll später in etwa so aussehen:

    (Trackbar oben)

    Jedoch haben ich nichtmal einen ansatz wie ich das ganze angehen soll.

    Meine Frage an euch wäre nun,
    wie gehe ich es am besten an, eine Trackbar selbst zu erstellen.

    Habt ihr Tutorial Links?
    Bitte (wenn möglich) nur links mit erklärung. Denn ich tuhe dies Hauptsächlich um mich in GDI+ weiterzubilden.

    Danke im Vorraus.
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


    Jep,
    grundsätzlich ist das Zeichnen nicht das Problem.
    Ich weiß nicht wie ich das hin und her ziehen des ich nenne es mal "Balkens" (der durch den die Value angegeben wird) machen soll.
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


    Um das ziehen zu ermöglichen:

    1) MouseDown-Event - ein klick auf das Runde Teil und du "greifst" quasie danach. Eine Boolean-Variable ist nützlich^^
    2) MouseMove-Event - wenn gegriffen wird, dann kannst du auf eine änderung der Mauspositon reagieren:

    Das Control ist 200 Pixel breit, die Maus befindet sich bei P(67|43). Der Y-Wert ist nicht relevant, nur der X-Wert:
    faktor = 67 / 200 'So erhältst du eine Zahl zwischen 0 und 1

    MinValue ist -50 und MaxValue ist 80. Der Wertebereich ist also 130 Einheiten groß. Der Aktuelle Wert ergibt sich demnach so:
    Value = 130 * faktor + MinValue
    Value => -6.45

    3) MouseUp-Event - man muss das runde teil auchwieder "loslassen" können


    Das Zeichnen passiert quasie genau umgekehrt. Aus Value musst du eine Pixel-Position berechnen.
    PixelX = (Value - MinValue)/Wertebereich * BreiteInPixeln

    Eigentlcih alles nur Mathe^^
    Erstmal danke,
    sehr Gute Erklärung!

    Jedoch habe ich noch eine Frage zu deinem Punkt 1:

    FreakJNS schrieb:

    1) MouseDown-Event - ein klick auf das Runde Teil und du "greifst" quasie danach. Eine Boolean-Variable ist nützlich^^
    Jetzt würde ich gerne wissen, wie ich nun einen Klick auf das Runde teil erkennen kann?
    Sollte ich die Position des Cursors einfach mit der des Kreises vergleichen?
    Oder wie würde dies schöner funktionieren?
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


    naja, du kannst die Position (also den Mittelpunkt) des Teils ja berechnen.
    Dann gibst du dem Ding einenRadius, z.B. 10 Pixel. Jetzt hast du 2 Möglichkeiten

    Möglichkeit 1: ungenau aber einfach (viereckige hitbox)
    Stell dir einen viereckigen kasten um das Runde Teil vor. Wenn die zu Prüfende Position sich in diesem befindet, wird ein "greifen" erkannt. Dazu einfach ein rectangle benutzen:
    Dim tmp as new rectangle (MittelpunktX - Radius, MittelpunktY - Radius, radius * 2, radius*2)
    und mit der rectangel.contains-mehtode prüfen.

    Möglichkeit 2: genau prüfen (kreisform)
    Ganz einfach: Wenn der Klick maximal "Radius" vom Mittelpunkt entfernt ist, dann wird ein "greifen" erkannt. => Satz des Pythagoras wird dir weiterhelfen.