Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
buongiorno a tutti, è da un po di tempo che non vengo su questo forum, ho ripreso un vecchio progetto che avevo accantonato x via di mancanza di tempo, premetto che ciò che scrivo non è mio, ho copiato uno schema per avere un custom progressbar x controllare il volume del mio media player, perche la progressbar che da il sistema non mi piace, solo che mi da un errore che non capisco, potete aiutarmi voi gentilmente? allego il codice che ho copiato
ps. scusate se ho copiato ma di disegno progettuale non capisco niente, le mie competenze arrivano fino ad un certo punto.
il form è un form .cs
Codice sorgente - presumibilmente C++
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApp1
{
public partial class volume_control : UserControl
{
public volume_control()
{
InitializeComponent();
this.Size=new Size(350, 30);
this.BackColor= Color.Black;
DoubleBuffered =true;
}
int pb_value = 40, pb_Min = 0, pb_Max =100;
publicint Max { get {return pb_Max;} set { pb_Max = value; Invalidate();}}
publicint Min { get {return pb_Min;} set { pb_Max = value; Invalidate();}}
publicint value { get {return pb_value;} set { pb_value = value; Invalidate();}}
publicint gap =10;
Color b_color = Color.Aqua;
public Color Bar_color { get {return b_color;} set { b_color = value;Invalidate();}}
scusate ho sbagliatp post dove postare il cod, ma non so come cancellarlo, questo è il cod, che uso x il mio player e dove voglio usare la custom progrressbar per il controllo del volume
grazie mille adesso tutto funziona. un altra domanda, è possibile usare questo controllo nel mio progetto vb.net essendo un progetto in c#? come posso importarlo?
creare una libreria in vb.net, in seguito importare la libreria ed usarlo nel progetto c#.
Edit:
Comunque non sò, ma rileggendo un pò il codice a me sembra corretto carlo.
Codice sorgente - presumibilmente C++
int pb_value = 40, pb_Min = 0, pb_Max =100;
publicint Max { get {return pb_Max;} set { pb_Max = value; Invalidate();}}
In tutti i miei progetti C# con controlli che realizzo, eseguo la medesima procedura.
Alla fine Max è solo una proprietà che restituisce pb_Max, e assegna pb_Max il valore, ridisegnando il controllo.
Mi sembra strano che gli abbia dato errore in quel punto.
Alcune proprietà come IsPassword o Visibile sono gestite direttamente dalle variabili.
e non vengono assegnate al costruttore.
Magari non so il contesto è diverso, non saprei spiegarmi la motivazione altrimenti.
ho scritto tutto questo giusto per curiosità, perché mi sembra molto strano.
Ultima modifica effettuata da Thejuster il 01/11/2023 alle 22:28
Comunque non sò, ma rileggendo un pò il codice a me sembra corretto carlo.
Sono perplesso anche io, l'userControl così come scritto se trascinato nel form da progettazione viene correttamente inserito e nelle proprietà Max vale 100. E' sufficiente uscire da progettazione e rientrare e l'userControl segnala la divisione per zero, le proprietà non sono più accessibili...
Ho provato cn VS2017 e VS2022.
@nightwolf
Il controllo lo puoi usare da vb.net come indicato da Thejuster, oppure convertirlo in VB.Net, meglio sarebbe se converti il tuo programma in C#, ma questo esula dalla discussione.
Per usare l'userControl nel tuo progetto VB.Net procedi come segue:
Su [Esplora soluzioni] sopra al nome del progetto clicca con il tasto destro e scegli dal menù: Aggiungi/Controllo utente, dai il nome all'userControl: volume_control.vb
si apre la pagina progettazione dell'userControl, vai al codice con F7, incolla il codice vb:
PrivateSub volume_control_MouseDown(ByVal sender AsObject, ByVal e As MouseEventArgs)HandlesMyBase.MouseDown
mouse =True
Bar_value(thumb_value(e.X))
EndSub
PrivateSub volume_control_MouseMove(ByVal sender AsObject, ByVal e As MouseEventArgs)HandlesMyBase.MouseMove
IfNot mouse ThenReturn
Bar_value(thumb_value(e.X))
EndSub
PrivateSub volume_control_MouseUp(ByVal sender AsObject, ByVal e As MouseEventArgs)HandlesMyBase.MouseUp
mouse =False
EndSub
PrivateSub Bar_value(ByVal value As Single)
If value < Min Then value = Min
If value > Max Then value = Max
If pb_value = value ThenReturn
pb_value =CInt(value)
Me.Refresh()
EndSub
PrivateFunction thumb_value(ByVal x AsInteger)As Single
Return Min +(Max - Min)* x / CSng((ClientSize.Width))
EndFunction
EndClass
Dovresti riscontrare la presenza di 4 errori perché mancano le immagini, salva tutto, vai su [Esplora soluzioni] e clicca sopra al nome del progetto con il tasto destro, questa volta dal menù scegli: proprietà, nella pagina che si apre scegli: Risorse, nei menù seleziona: Aggiungi risorsa/Aggiungi file esistente: scegli le 4 immagini che serviranno a personalizzare la grafica, i nomi devono essere: down_img, mid_img, mute_img e high_img.
Ora non ci devono essere più errori.
Bisogna attivare gli eventi, torna in volume_control.vb(progettazione), in basso a destre c'è la pagina delle proprietà, clicca l'iconcina a forma di fulmine per visualizzare gli eventi, scorri gli eventi e trova: MouseDown a destra seleziona la routine che deve essere eseguita quando si schiaccia il mouse: volume_control_MouseDown
fai lo stesso con:
MouseMove - volume_control_MouseMove
MouseUp - volume_control_MouseUp
Paint - volume_control_Paint
Salva tutto, vai in media_pleyer(progettazione) e sulla casella degli strumenti trovi in alto l'userControl: volume_control, trascina nel form ed usalo come una HScrollBar normale.
Se hai problemi chiedi.
Ultima modifica effettuata da Carlo il 02/11/2023 alle 2:09