2009-02-28 4 views
6

Sto lavorando a un jukebox winforms in C#. Mi piacerebbe avere una barra di avanzamento verticale per il controllo del volume. Qualcuno sa come farlo?Come faccio a far muovere verticalmente una barra di avanzamento di winforms in C#?

+0

Si prega di non utilizzare una barra di avanzamento per questo; una barra di scorrimento verticale è il controllo più appropriato. Le barre di avanzamento sono progettate per l'output visivo e i controlli abusanti in questo modo portano a interfacce utente scomode. – Rob

+0

Questo è un buon punto. Ho visto "barra di avanzamento verticale" e non ho guardato il resto. Probabilmente una barra di avanzamento non è la cosa da usare per mostrare il livello di un controllo del volume. –

risposta

17

Non so che mi piacerebbe utilizzare una barra di avanzamento per il controllo il volume, ma per visualizzazione il livello del volume è possibile utilizzare un controllo utente disegnato o si può solo ridimensionare un'etichetta con un colore di sfondo (che l'ultimo metodo è di tipo kludgy)

La barra di avanzamento non è pensata per prendere input, indipendentemente dall'orientamento.

Se si desidera regolare il volume , prendere in considerazione l'utilizzo di una barra di scorrimento verticale o di un trackbar con a vertical orientation.

Per quel che vale, c'è a discussion on how to create a vertical progress bar on MSDN, dove si suggeriscono di fare questo:

using System; 
using System.Windows.Forms; 

public class VerticalProgressBar : ProgressBar { 
    protected override CreateParams CreateParams { 
    get { 
     CreateParams cp = base.CreateParams; 
     cp.Style |= 0x04; 
     return cp; 
    } 
    } 
} 

che imposta il flag PBS_VERTICAL in Style.

+0

+1: "Funziona sulla mia macchina" – Sung

+0

+1 Grazie, funziona molto bene. – Krakerjak

+0

Aggiungere quanto segue alla classe e le dimensioni verranno impostate correttamente quando si trascina il controllo sul modulo. override protetto System.Drawing.Size DefaultSize { get { return new System.Drawing.Size (23,100); } } –

6

Per questo devi utilizzare ProgressBarRenderer. È documentato in MSDN

La documentazione mostra effettivamente l'implementazione di una barra di avanzamento verticale, quindi dovrebbe renderla facile per te. :-)

+0

+1 Questa soluzione ha funzionato, ma quella lasciata da Daniel sembrava migliore. – Krakerjak

+0

Nessun problema. Ti ho appena detto quello che Microsoft ha detto che dovresti fare; è la loro struttura, dopo tutto. è una tua scelta se farlo o meno. :-) –