Come creare un indicatore uniforme in Visual C#

Traduzione articoli Traduzione articoli
Identificativo articolo: 323116 - Visualizza i prodotti a cui si riferisce l?articolo.
Per la una versione di Microsoft Visual Basic .NET di questo articolo, vedere 323088.
Espandi tutto | Chiudi tutto

In questa pagina

Sommario

In questo articolo viene illustrato come creare UserControl semplice, personalizzato per creare un semplice controllo ProgressBar di scorrimento.

Nelle versioni precedenti del controllo ProgressBar , come la versione fornita con il controllo ActiveX controlli comuni di Windows, Ŕ possibile visualizzare lo stato di avanzamento in due diverse visualizzazioni. Per controllare queste visualizzazioni, Ŕ possibile utilizzare la proprietÓ di scorrimento , che include le impostazioni standard e uniforme. Scorrimento continuo produce un blocco a tinta unita di colore che rappresenta lo stato di avanzamento e lo scorrimento standard visualizzato segmentato ed Ŕ costituito da una serie di piccoli blocchi o rettangoli.

Il controllo ProgressBar Ŕ incluso con Microsoft Visual C# supporta solo l'impostazione standard.

Il codice di esempio in questo articolo viene illustrato come creare un controllo che supporta le seguenti proprietÓ:
  • minimo . Questa proprietÓ Ottiene o imposta il valore inferiore per l'intervallo di valori validi per lo stato di avanzamento. Il valore predefinito di questa proprietÓ Ŕ zero (0); non Ŕ possibile impostare questa proprietÓ su un valore negativo.
  • massimo . Questa proprietÓ Ottiene o imposta il valore superiore per l'intervallo di valori validi per lo stato di avanzamento. Il valore predefinito di questa proprietÓ Ŕ 100.
  • valore . Questa proprietÓ Ottiene o imposta il livello di avanzamento corrente. Il valore deve essere nell'intervallo di definire proprietÓ massimo e il valore minimo .
  • ProgressBarColor . Questa proprietÓ Ottiene o imposta il colore dell'indicatore.

Creare un controllo ProgressBar

  1. Attenersi alla seguente procedura per creare un nuovo progetto di libreria di controlli Windows in Visual C#:
    1. Avviare Microsoft Visual Studio.
    2. Scegliere Nuovo dal menu file , quindi progetto .
    3. Nella finestra di dialogo Nuovo progetto , fare clic su Visual C# in Tipi progetto e quindi fare clic su Libreria di controlli Windows Form in modelli .

      Nota In Visual Studio .NET 2003, fare clic su Progetti di Visual C# invece di C# .
    4. Nella casella nome digitare SmoothProgressBar e quindi fare clic su OK .
    5. In Esplora progetti, rinominare il modulo di classe predefinito da UserControl1.cs SmoothProgressBar.cs.
    6. Nella finestra proprietÓ per l'oggetto UserControl , modificare la proprietÓ Nome da UserControl1 a SmoothProgressBar .
  2. A questo punto, in genere ereditano dalla classe del controllo e quindi aggiungere le funzionalitÓ aggiuntive per estendere un controllo esistente. Tuttavia, la classe di ProgressBar Ŕ sealed e non pu˛ essere ereditata. Di conseguenza, Ŕ necessario generare il controllo dall'inizio.

    Aggiungere il codice riportato di seguito al file SmoothProgressBar.cs, nella classe che deriva da UserControl.

    Nota In Visual Studio .NET 2003, aggiungere il codice al modulo di classe della classe UserControl derivato, subito dopo la sezione ? codice generato da Progettazione Windows Form ?.
    int min = 0;	// Minimum value for progress range
    int max = 100;	// Maximum value for progress range
    int val = 0;		// Current progress
    Color BarColor = Color.Blue;		// Color of progress meter
    
    protected override void OnResize(EventArgs e)
    {
    	// Invalidate the control to get a repaint.
    	this.Invalidate();
    }
    
    protected override void OnPaint(PaintEventArgs e)
    {
    	Graphics g = e.Graphics;
    	SolidBrush brush = new SolidBrush(BarColor);
    	float percent = (float)(val - min) / (float)(max - min);
    	Rectangle rect = this.ClientRectangle;
    
    	// Calculate area for drawing the progress.
    	rect.Width = (int)((float)rect.Width * percent);
    
    	// Draw the progress meter.
    	g.FillRectangle(brush, rect);
    
    	// Draw a three-dimensional border around the control.
    	Draw3DBorder(g);
    
    	// Clean up.
    	brush.Dispose();
    	g.Dispose();		
    }
    
    public int Minimum
    {
    	get
    	{
    		return min;
    	}
    
    	set
    	{
    		// Prevent a negative value.
    		if (value < 0)
    		{
    			min = 0;
    		}
    		
    		// Make sure that the minimum value is never set higher than the maximum value.
    		if (value > max)
    		{
    			min = value;
    			min = value;
    		}
    		
    		// Ensure value is still in range
    		if (val < min)
    		{
    			val = min;
    		}
    
    		// Invalidate the control to get a repaint.
    		this.Invalidate();
    	}
    }
    
    public int Maximum
    {
    	get
    	{
    		return max;
    	}
    
    	set
    	{
    		// Make sure that the maximum value is never set lower than the minimum value.
    		if (value < min)
    		{
    			min = value;
    		}
    
    		max = value;
    
    		// Make sure that value is still in range.
    		if (val > max)
    		{
    			val = max;
    		}
    
    		// Invalidate the control to get a repaint.
    		this.Invalidate();
    	}
    }
    
    public int Value
    {
    	get
    	{
    		return val;
    	}
    
    	set
    	{
    		int oldValue = val;
    
    		// Make sure that the value does not stray outside the valid range.
    		if (value < min)
    		{
    			val = min;
    		}
    		else if (value > max)
    		{
    			val = max;
    		}
    		else
    		{
    			val = value;
    		}
    
    		// Invalidate only the changed area.
    		float percent;
    
    		Rectangle newValueRect = this.ClientRectangle;
    		Rectangle oldValueRect = this.ClientRectangle;
    
    		// Use a new value to calculate the rectangle for progress.
    		percent = (float)(val - min) / (float)(max - min);
    		newValueRect.Width = (int)((float)newValueRect.Width * percent);
    
    		// Use an old value to calculate the rectangle for progress.
    		percent = (float)(oldValue - min) / (float)(max - min);
    		oldValueRect.Width = (int)((float)oldValueRect.Width * percent);
    
    		Rectangle updateRect = new Rectangle();
    		
    		// Find only the part of the screen that must be updated.
    		if (newValueRect.Width > oldValueRect.Width)
    		{
    			updateRect.X = oldValueRect.Size.Width;
    			updateRect.Width = newValueRect.Width - oldValueRect.Width;
    		}
    		else
    		{
    			updateRect.X = newValueRect.Size.Width;
    			updateRect.Width = oldValueRect.Width - newValueRect.Width;
    		}
    
    		updateRect.Height = this.Height;
    
    		// Invalidate the intersection region only.
    		this.Invalidate(updateRect);
    	}
    }
    
    public Color ProgressBarColor
    {
    	get
    	{
    		return BarColor;
    	}
    
    	set
    	{
    		BarColor = value;
    
    		// Invalidate the control to get a repaint.
    		this.Invalidate();
    	}
    }
    
    private void Draw3DBorder(Graphics g)
    {
    	int PenWidth = (int)Pens.White.Width;
    
    	g.DrawLine(Pens.DarkGray, 
    		new Point(this.ClientRectangle.Left, this.ClientRectangle.Top),
    		new Point(this.ClientRectangle.Width - PenWidth, this.ClientRectangle.Top));
    	g.DrawLine(Pens.DarkGray,
    		new Point(this.ClientRectangle.Left, this.ClientRectangle.Top), 
    		new Point(this.ClientRectangle.Left, this.ClientRectangle.Height - PenWidth));
    	g.DrawLine(Pens.White,
    		new Point(this.ClientRectangle.Left, this.ClientRectangle.Height - PenWidth), 
    		new Point(this.ClientRectangle.Width - PenWidth, this.ClientRectangle.Height - PenWidth));
    	g.DrawLine(Pens.White,
    		new Point(this.ClientRectangle.Width - PenWidth, this.ClientRectangle.Top), 
    		new Point(this.ClientRectangle.Width - PenWidth, this.ClientRectangle.Height - PenWidth));
    } 
    					
  3. Scegliere dal menu Genera , Genera soluzione per compilare il progetto.

Creare un'applicazione client di esempio

  1. Scegliere Nuovo dal menu file , quindi progetto .
  2. Nella finestra di dialogo Aggiungi nuovo progetto , fare clic su Visual C# in Tipi progetto fare clic su Applicazione Windows Form in modelli e quindi fare clic su OK .

    Nota In Visual Studio .NET 2003, fare clic su Progetti di Visual C# invece di C# .
  3. Attenersi alla seguente procedura per aggiungere due istanze del controllo SmoothProgressBar il modulo:
    1. Scegliere dal menu Strumenti , Scegli elementi della casella degli strumenti .

      Nota In Visual Studio .NET 2003, fare clic su Personalizza casella degli strumenti delle anzichÚ Scegli elementi della casella degli strumenti .
    2. Fare clic sulla scheda Componenti .NET Framework .
    3. Fare clic su Sfoglia e individuare il file SmoothProgressBar.dll, in cui Ŕ creato nella sezione "Create a custom ProgressBar control".
    4. Fare clic su OK . Si noti che il controllo SmoothProgressBar viene aggiunto alla casella degli strumenti.
    5. Trascinare due istanze del controllo SmoothProgressBar dalla casella degli strumenti al form predefinito del progetto applicazione Windows.
  4. Trascinare un controllo Timer dalla casella degli strumenti al form.
  5. Aggiungere il codice riportato di seguito all'evento Tick del controllo Timer :
    if (this.smoothProgressBar1.Value > 0)
    {
    	this.smoothProgressBar1.Value--;
    	this.smoothProgressBar2.Value++;
    }
    else
    {
    	this.timer1.Enabled = false;
    } 
    					
  6. Trascinare un controllo Button dalla casella degli strumenti al form.
  7. Aggiungere il seguente codice all'evento Click del controllo Button :
    this.smoothProgressBar1.Value = 100;
    this.smoothProgressBar2.Value = 0;
    			
    this.timer1.Interval = 1;
    this.timer1.Enabled = true; 
    					
  8. Dal menu debug , scegliere Avvia per eseguire il progetto di esempio.
  9. Fare clic sul pulsante. Si noti che gli indicatori di due avanzamento visualizzano il testo "stato". Un indicatore di stato Visualizza lo stato di avanzamento in modo crescente e altri indicatore di stato Visualizza lo stato in una diminuzione o modo conto alla rovescia.

ProprietÓ

Identificativo articolo: 323116 - Ultima modifica: venerdý 1 agosto 2008 - Revisione: 4.1
Le informazioni in questo articolo si applicano a:
  • Microsoft Visual C# 2008 Express Edition
  • Microsoft Visual C# 2005 Express Edition
Chiavi:á
kbmt kbsweptvs2008 kbhowtomaster KB323116 KbMtit
Traduzione automatica articoli
Il presente articolo Ŕ stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non Ŕ sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, pi¨ o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non Ŕ la sua. Microsoft non Ŕ responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 323116
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com