TrackBar mit Prozentangabe?

  • VB.NET

Es gibt 33 Antworten in diesem Thema. Der letzte Beitrag () ist von ChOoSeMyNaMe.

    TrackBar mit Prozentangabe?

    Schönen Abend, Visual Basic Forum! :thumbup:
    Mein Problem ist vollgendes:
    Ich nutze eine TrackBar als Lautstärke-Regulierung in einem Musik Player. Sie funktioniert einwandfrei, jedoch hätte ich gerne neben der TrackBar eine "%" Anzeige, auf welcher Stufe sich die Lautstärke befindet (Natürlicherweise von 0-100% :P ). Habt ihr da einen Tipp für mich?
    Nach einigem Googlen, bin ich immer noch nicht schlauer...
    Danke schon mal für Antworten:)

    Hier der Code (Eigentlich selbsterklärend)

    Private Sub TrackBar2_Scroll(ByVal sender As Object, ByVal e As EventArgs) Handles TrackBar2.Scroll
    player.Volume = TrackBar2.Value
    Hi,
    wenn ich dich richtig verstanden habe kannst du einfach ein label hinzufügen und dann mit

    VB.NET-Quellcode

    1. Private Sub TrackBar2_Scroll(sender As Object, e As EventArgs) Handles TrackBar2.Scroll
    2. player.Volume = TrackBar2.Value
    3. Label1.Text = TrackBar2.Value * 10 & "%"
    4. End Sub


    die prozent anzeigen. Du musst nur darauf achten, was du bei der trackbar als max eingestellt hast.

    VB.NET-Quellcode

    1. Private Sub TrackBar_Scroll(sender As Object, e As EventArgs) Handles Trackbar.Scroll
    2. Dim trackBarPercentageDouble As Double = TrackBar.Value / TrackBar.Maximum * 100 'Gleitkommazahl
    3. Dim trackBarPercentageInteger As Integer = TrackBar.Value * 100 \ TrackBar.Maximum 'Wenns net so genau sein muss
    4. Label.Text = String.Format("Volume: {0}%", trackBarPercentageDouble)
    5. End Sub

    So wird das eigentlich im Allgemeinen berechnet. Code darfste gerne anpassen, is nicht auf deinen abgestimmt.
    Ich verstehe nicht warum du über Google nichts gefunden hast. Das ist ne simple Prozentrechnung, die bei @S3bas7ian failt, wenn dein TrackBar.Maximum
    nicht auf 10 steht. Falls man sich jetzt keine "Formel" für die Prozentrechnung merken kann, dann kann man ja auch den Dreisatz verwenden.

    Angenommen deine Trackbar hat 21 Stufen (von einschließlich 0 bis 20)
    Es entspricht also Stufe 20 den 100% Volumen. Jetzt möchtest du aber wissen um wieviel Prozent sich das Volumen erhöht pro Stufe!
    Dazu rechnen wir im Dreisatz auf eine Stufe herunter:

    Quellcode

    1. 20 -> 100% // Da proportional -> beide durch 20 Teilen um auf eine Stufe zu kommen
    2. 20/20=1 -> 100%/20=5%
    3. => 1 -> 5% // Pro Stufe erhöht sich das Volumen um 5 Prozent
    4. // Auf welches Volumen erhöht sich es, wenn ich aber Stufe x habe
    5. 1*x -> 5% * x //Wir multiplizieren mit x, da proportional
    6. Beispiel (Stufe 5):
    7. 1*5=5 -> 5%*5=25%


    Und genau diesen Ablauf den wir mit dem Dreisatz anwenden packst du als Rechenalgorithmus in deinen Code. Nur muss man diese dann eventuell bei einer Ganzzahldivision aufpassen, da das Ergebnis
    ja abgeschnitten wird und wir keine Gleitkommazahl erhalten. So könnte dann nicht richtig zu Ende gerechnet werden und sogut wie jeder errechnete Prozentwert wird auf einmal 0.

    MfG Tim

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

    Danke für die Hilfreichen Antworten! Hat mir sehr geholfen! :thumbup:
    Aber wie @S3bas7ian schon sagte... Ich muss auf den Wert von der TrackBar achten. Und da ist der höchste Wert 100000. Also werden auch 100000 angezeigt.
    Da muss man ein aufpassen ;)

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

    Ich habe eine allgemeine Lösung gezeigt, die ist relativ maximumunabhängig. Außerdem scheint @S3bas7ian nicht Option Strict On zu programmieren, denn

    VB.NET-Quellcode

    1. Label.Text = TrackBar.Value * 10 & "%"

    ist ein ziemlicher Typensalat. Label.Text erwartet einen String. TrackBar.Value * 10 ist aber vom Typ Integer und zur Krönung dann noch mittels String &-Operator
    ein %-char einfügen. Das bittere ist, dass der Compiler nicht mal nen Syntaxfehler meldet (soweit ich weiß, da ich nur Option Strict On progge).
    Die Zeile nochmal "in richtig":

    VB.NET-Quellcode

    1. Label.Text = String.Concat(TrackBar.Value * 10, "%")
    2. 'oder wenn schönere Formatierung erwartet
    3. Label.Text = String.Format("Progress: {0}%", TrackBar.Value * 10)


    Ich bitte dich, dass du dir die Prozentrechnung trotzdem nochmal anschaust^^

    MfG Tim

    Fortender schrieb:

    Ich habe eine allgemeine Lösung gezeigt, die ist relativ maximumunabhängig. Außerdem scheint @S3bas7ian nicht Option Strict On zu programmieren, denn
    VB.NET-Quellcode

    Label.Text = TrackBar.Value * 10 & "%"


    ist ein ziemlicher Typensalat.


    Ne, das ist schon korrekt. & formatiert das automatisch zu einem String. Kannst auch in C# mal testen, das geht.

    Grüße
    #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 :!:
    Okay danke für die Hilfe, noch mal :D Hier ist mal der Code, welcher bei mir jedoch ein Problem hat (der Code ist von @Fortender ) :

    Public Class Form1
    Dim Pfad As String = Application.StartupPath & "C:\Users\-\Desktop\Listboxinhalt.txt"

    Speichern:
    Private Sub Speichern_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click
    ListBox1.Items.AddRange(IO.File.ReadAllLines(Pfad))
    End Sub

    Laden:
    Private Sub Laden_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
    For Each item As String In ListBox1.Items
    My.Computer.FileSystem.WriteAllText(Pfad, item & vbNewLine, True)
    Next
    End Sub

    Ich bekomme jedoch die Dateien nicht gespeichert. Visual Basic haut als Fehler raus, dass das angegebene Pfadformat nicht unterstützt wird. Was mache ich jetzt schon wieder falsch? :D
    Application.StartupPath gibt dir den Pfad in dem deine Anwendung startet zurück.
    In deiner Variable "Start" steht in etwa soetwas drin: "C:\Users\User\Documents\Visual Studio X\Projects\blablaC:\Users\-\Desktop\Listboxinhalt.txt".
    Wie du merkst ist das kein korrekter Pfad. "C:\Users\-\Desktop\Listboxinhalt.txt" ist schon ein absoluter Dateipfad, da gibts eigentlich nichts mehr
    hinzuzufügen.

    DerDepp2 schrieb:

    den Pfad nicht
    Sieh Dir mal genau den Pfad an, gib ihn z.B. in einer MessageBox aus oder lerne gleich zu debuggen. Gugst Du hier.
    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!

    DerDepp2 schrieb:

    Dim Pfad As String = Application.StartupPath & "C:\Users\-\Desktop\Listboxinhalt.txt"


    Sehen wir uns deinen Pfad anschließend mal an
    Application.StartupPath ist z.B. C:\Software\VS12\Template
    demnach wäre dein "Pfad"
    Pfad = "C:\Software\VS12\TemplateC:\Users\-\Desktop\Listboxinhalt.txt"

    Das dein Prgramm an der Stelle nix findet ist mir klar
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."
    Okay hab eine Lösung:
    TextBox2.Text = "All In One Player" & IO.Path.GetFileNameWithoutExtension(player.MediaFile)

    Ich hab einen Button zum öffnen des Explorers, um ein Lied auszuwählen:
    Dim ofd As New OpenFileDialog
    If ofd.ShowDialog = Windows.Forms.DialogResult.OK Then
    player.MediaFile = ofd.FileName
    End If

    Nun hab ich vor, dass Ich auf "Öffnen" klicke und der Name des Liedes (ohne Pfad) in einer ListBox angezeigt wird. Wie bekomme ich das hin?
    Danke schon mal :D :)

    VB.NET-Quellcode

    1. System.IO.Path.GetFileNameWithoutExtension("Dein String") 'Nur Dateiname
    2. 'Aber das hattest du ja schon, sorry.
    3. ListBox1.Items.Add("Dein String") 'So fügst du (/addest du) ein Item deiner ListBox zu


    arbeite / nutze bitte den VB-Tag im Forum, dann fällt sowas eher auf...

    Und schau das Option Strict und Option Explizit "On" sind.
    In den aller ersten Zeilen

    VB.NET-Quellcode

    1. Option Explicit On
    2. Option Strict On


    Oder stelle dein Visual Studio unter "Mein Projekt -> Kompilieren -> Kompilier Optionen" ein.
    Option Strict On!

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

    @Drahuverar Danke! Ich kann jetzt mit dem "Öffnen" Button, die ausgewählte Datei in der ListBox anzeigen lassen und habe direkt auch die Funktion eingebaut, dass man ein (in meinem Fall) Lied duplizieren kann. Das geschieht jedoch mit einem Klick? Kann man es so einrichten, dass eine Datei in der ListBox mit einem Doppelklick duplizieren kann? Dann könnte man mit einem einfachen Klick z.b. die ausgewählte Datei löschen.
    Danke schon mal ! :D
    @Drahuverar Hier ist der Code, den ich verwende zum Anzeigen von Dateien, in der ListBox:

    Einmal, um die Datei ohne Pfad in der ListBox anzuzeigen:

    VB.NET-Quellcode

    1. Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
    2. ListBox1.SelectedIndexChanged
    3. ListBox1.Items.Add(System.IO.Path.GetFileNameWithoutExtension(player.MediaFile))
    4. End Sub


    Und, damit man auf "Öffnen" drückt und das gewählte Lied in der ListBox erscheint:

    VB.NET-Quellcode

    1. Private Sub Öffnen_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Öffnen.Click
    2. Dim ofd As New OpenFileDialog
    3. If ofd.ShowDialog = Windows.Forms.DialogResult.OK Then
    4. player.MediaFile = ofd.FileName
    5. ListBox1.Items.Add(IO.Path.GetFileNameWithoutExtension(player.MediaFile))
    6. End If
    7. End Sub


    Das mit dem ContextMenuStrip ist eine sehr gute Idee! Aber ich hätte es gerne, mit dem Laden und Speichern, dass das über Buttons neben der Playlist (bzw. ListBox)geschieht.
    Einen Button um die gesamte Liste zu löschen habe ich schon, aber keine Lösung, um einzelne Dateien aus der Liste zu löschen (kann bei einer Playlist ja nützlich sein :D ). Man kann auch schon per Drag and Drop Dateien in die ListBox ziehen, aber leider dann nicht anklicken und abspielen :( Da muss ich noch einen Lösungsweg finden.

    Also die Dinge die ich noch brauche, sind:
    -zwei Buttons über der Playlist, zum laden und speichern einer oder der Playlist
    -einzelne Dateien in der ListBox löschen (Per ContextMenu meinetwegen :D )
    -das anklicken einer Datei (MP3) in der ListBox, zum sofortigen abspielen
    -evtl. auch eine automatische Fortsetzung des nächsten Liedes in der Liste, wenn das aktuelle Lied zu Ende ist...

    Du siehst....... Noch ein Haufen Arbeit :D Ich bin gerade dabei das Programm zu Teilen und jedes Problem einzeln zu lösen. Das wird noch eine lange Nacht.. :D

    Edit:
    Den Code zum löschen einzelner Dateien habe ich mir schon zusammengestellt:

    VB.NET-Quellcode

    1. ListBox1.Items.Remove(ListBox1.SelectedItem)


    aus dem Code erkennt man, dass man mit einem Klick die Datei löscht. Kriegt man es hin, dass man per Doppelklick die Datei löscht?

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „DerDepp2“ ()

    So kann man das doch schon viel besser lesen. ;)

    Hab dir mal ein kleines Projekt gemacht,
    ist soweit kommentiert.

    Bei dem Abspielen von Liedern:
    Hast du denn irgendwas zum abspielen auf deiner Form?
    Oder wie meinst du das..?

    Grüße
    Dateien
    Option Strict On!
    @Drahuverar Vielen Dank!!! :thumbsup: :thumbup: In dem kleinen Programm sind alle Informationen, die ich noch brauche! Und wenn man sich den Code so anguckt... Eigentlich Easy :rolleyes: Danke für die Mühe:)

    Im Anhang habe ich dir mal einen Screenshot, von der Form, gemacht ;) Vielleicht ist das so besser, als es zu beschreiben 8)

    Achte mal nicht auf das Design... Ist noch nicht ganz fertig :D

    Bilder
    • Form1.jpg

      81,68 kB, 1.492×747, 219 mal angesehen

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