Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    28

    [vb.net]Controllare il volume con una TrackBar

    Ho un progetto costituito da un Form e una Classe, nel Form ho aggiunto i seguenti controlli: una TrackBar, una Label e un Button.

    Il Form contiene questo codice:
    codice:
    Public Class Form1
    
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            TrackBar1.TickFrequency = 1
            TrackBar1.Minimum = 0
            TrackBar1.Maximum = 10
        End Sub
    
        Private Sub TrackBar1_Scroll(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TrackBar1.Scroll
            Label1.Text = TrackBar1.Value
            Class1.A.Volume = TrackBar1.Value 'qui mi da l'errore di runtime 
        End Sub
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Class1.A.Play()
        End Sub
    
    End Class
    mentre nella Classe, che ho aggiunto al progetto da

    Progetto >> Aggiungi classe...

    contiene questo codice, per rendere la variabile A globale:

    codice:
    Public Class Class1
        Public Shared A As New Microsoft.DirectX.AudioVideoPlayback.Audio("C:\" & "pupo.mp3")
    End Class
    Naturalmente ho aggiunto i riferimenti a Microsoft.DirectX e a Microsoft.DirectX.AudioVideoPlayback da

    Progetto >> Aggiungi riferimento...

    Mi da un errore di runtime nel punto che ho indicato con un commento nel codice e non riesco a regolare il volume del file.mp3 che ho messo in C.

    Ci sto smanettando da tutta la notte ma non ci riesco proprio.

    Qualcuno mi può aiutare perfavore?

    p.s. scusate se non l' ho specificato prima: come ambinete di sviluppo sto usando Visual Basic 2005 Express Edition.

  2. #2
    Mi sapi dire il testo dell'errore?
    Potrebbe essere importante per capire che tipo di errore si tratta...
    Nulla è impossibile

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    28
    Originariamente inviato da Knightrider86
    Mi sapi dire il testo dell'errore?
    Potrebbe essere importante per capire che tipo di errore si tratta...
    Certo, il testo dell' errore è:

    DirectXException non è stata gestita

    sul rigo in cui ho messo il commento, cioè:

    Class1.A.Volume = TrackBar1.Value

    nella Sub TrackBar1_Scroll(...

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320

    Moderazione

    VB viene trattato nell'apposito sub-forum.

    Ti sposto.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    28
    Buona Domenica a tutti,

    ho risolto il problema del post precedente gestendo lì eccezione come nel codice che potete vedere sotto, lo riscrivo interamente così chi avesse la pazienza di costruirsi il form come ho descritto nel primo post di questo topic possa provare il programma semplicemente copiando e incollando questo secondo codice, per il resto la descrizione è identica a quella del primo post:

    codice:
    Public Class Form1
    
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            TrackBar1.Value = (TrackBar1.Maximum + TrackBar1.Minimum) / 2
        End Sub
    
        Private Sub ApriToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ApriToolStripMenuItem.Click
            OpenFileDialog1.ShowDialog()
        End Sub
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Class1.A.Play()
        End Sub
    
        Private Sub TrackBar1_Scroll(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TrackBar1.Scroll
            TrackBar1.TickFrequency = 1
            TrackBar1.SmallChange = 10
            TrackBar1.LargeChange = 10
            TrackBar1.Minimum = -3000
            TrackBar1.Maximum = 0
            If TrackBar1.Value <> TrackBar1.Minimum Then
                Try
                    Class1.A.Volume = TrackBar1.Value
                Catch ex As Exception
                    Class1.A.Volume = TrackBar1.Minimum
                End Try
            End If
            Label1.Text = TrackBar1.Value
        End Sub
    
    End Class
    La classe, per definire la variabile globale A, è stata sempre aggiunta come descritto nel primo post del topic, cioè:

    Progetto >> Aggiungi classe...

    e contiene lo stesso codice:

    codice:
    Public Class Class1
        Public Shared A As New Microsoft.DirectX.AudioVideoPlayback.Audio(Form1.OpenFileDialog1.FileName)
    End Class
    Così il programma funge, cioè si puo scegliere un file audio dalla voce di menu File >> Apri, eseguirlo e modificarne il volume.

    Adesso però sto cercando di scrivere il codice più elegantemente, perfavore, qualcuno mi puo correggere questo?

    codice:
    Public Class Form1
    
        Public Class Class1
            Public Shared A As New Microsoft.DirectX.AudioVideoPlayback.Audio(Form1.OpenFileDialog1.FileName)
        End Class
    
        Private Sub MyAppPrivate(ByVal sender As System.Object, ByVal e As System.EventArgs) _
                Handles MyBase.Load, ApriToolStripMenuItem.Click, EsciToolStripMenuItem.Click, _
                Button1.Click, TrackBar1.Scroll
    
            TrackBar1.Value = (TrackBar1.Maximum + TrackBar1.Minimum) / 2
    
            If sender.Equals(ApriToolStripMenuItem) Then
                OpenFileDialog1.ShowDialog()
            ElseIf sender.Equals(EsciToolStripMenuItem) Then
                Application.Exit()
            ElseIf sender.Equals(Button1) Then
                Class1.A.Play()
            ElseIf sender.Equals(TrackBar1) Then
                TrackBar1.TickFrequency = 1
                TrackBar1.SmallChange = 10
                TrackBar1.LargeChange = 10
                TrackBar1.Minimum = -3000
                TrackBar1.Maximum = 0
                If TrackBar1.Value <> TrackBar1.Minimum Then
                    Try
                        Class1.A.Volume = TrackBar1.Value
                    Catch ex As Exception
                        Class1.A.Volume = TrackBar1.Minimum
                    End Try
                End If
                Label1.Text = TrackBar1.Value
            End If
    
        End Sub
    
    End Class
    Adesso il form è sempre quello di prima, ma ho eliminato il file di nome Classe1.vb in quanto la classe l' ho definita nel Form1.

    Perfavore datemi una mano, l' errore sarà banale, ma ai miei occhi è invisibile....

    GRAZIE a tutti dell' attenzione.

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    28
    Comumque il problema di fondo, oltre alla questione di codice, che come visto in un modo o nell' altro si risolve infatti almeno una delle 2 versioni dello stesso programma funge, è questo:

    nella stesura di un listato in vb.net è più professionale utilizzzare gestori di eventi condivisi per i controlli che gestiscono eventi simili oppure no? o è indifferente? ( anche se indifferente non credo che sia) e... se si, cioè se è più professionale utilizzare i gestori di eventi è necessario utilizzare un unico gestore per tutti gli eventi che presentano gli stessi parametri?... come cercavo di fare con la seconda versione del programma?.. oppure si puo fare per categorie?... come per esempio nel codice sotto:

    codice:
    Public Class Form1
    
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            TrackBar1.Value = (TrackBar1.Maximum + TrackBar1.Minimum) / 2
        End Sub
    
        Private Sub ComandiMenu(ByVal sender As System.Object, _
                                ByVal e As System.EventArgs) Handles EsciToolStripMenuItem.Click, _
                                                                     ApriToolStripMenuItem.Click
            If sender.Equals(EsciToolStripMenuItem) Then
                Application.Exit()
            ElseIf sender.Equals(ApriToolStripMenuItem) Then
                OpenFileDialog1.ShowDialog()
            End If
            Label2.Text = OpenFileDialog1.FileName
        End Sub
    
        Private Sub Pulsanti(ByVal sender As System.Object, _
                             ByVal e As System.EventArgs) Handles Button1.Click, _
                                                                  Button2.Click, _
                                                                  Button3.Click
            If sender.Equals(Button1) Then
                Class1.A.Open(OpenFileDialog1.FileName)
                Class1.A.Play()
            ElseIf sender.Equals(Button2) Then
                Class1.A.Pause()
            ElseIf sender.Equals(Button3) Then
                Class1.A.Stop()
            End If
        End Sub
    
        Private Sub TrackBar1_Scroll(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TrackBar1.Scroll
            TrackBar1.TickFrequency = 1
            TrackBar1.SmallChange = 10
            TrackBar1.LargeChange = 10
            TrackBar1.Minimum = -3000
            TrackBar1.Maximum = 0
            If TrackBar1.Value <> TrackBar1.Minimum Then
                Try
                    Class1.A.Volume = TrackBar1.Value
                Catch ex As Exception
                    Class1.A.Volume = TrackBar1.Minimum
                End Try
            End If
            Label1.Text = TrackBar1.Value
        End Sub
    
    End Class
    ?????????????????????????????????????????????????? ???????????????????

    p.s. ahh nella seconda versione del programma, quello che funziona, se dopo si sceglie un altro file riproduce sempre quello di prima; per poter cambiare file da ascoltare aggiungere questo rigo

    Class1.A.Open(OpenFileDialog1.FileName)

    nell' evento ApriToolStripMenuItem

    praticamente subito prima del rigo

    Class1.A.Play()

    Quest' ultima versione del programma funziona correttamente, almeno riguardo a quell' aspetto.

    Devo ancora risolvere qualche piccolo problemino come pre esempio una eccezione che avviene se cerco di muovere la TrackBar prima di aver selezionato un file. Succerimenti a riguardo??

    GRAZIE DELL' ATTENZIONE

    p.s. se volete provare quest' ultimo codice aggiungete una Labe2 nel form per visualizzare il percorso del file selezionato.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.