Como criar uma barra de progresso suave no translation from VPE for Csharp Visual

Traduções deste artigo Traduções deste artigo
ID do artigo: 323116 - Exibir os produtos aos quais esse artigo se aplica.
Para uma versão deste artigo do Microsoft Visual Basic. NET, consulte 323088.
Expandir tudo | Recolher tudo

Neste artigo

Sumário

Este artigo demonstra como criar um simples, personalizado UserControl para criar uma suavização, rolagem controle ProgressBar .

Em versões anteriores do controle ProgressBar , como a versão é fornecido com o controle ActiveX de controles comuns do Microsoft Windows, você pode exibir o andamento em dois modos diferentes. Para controlar esses modos de exibição, use a propriedade de rolagem , que inclui configurações padrão e suaves. Rolagem suave produz um bloco sólido da cor que representa o progresso e rolagem padrão aparece segmentado e é composto de uma série de pequenos blocos ou retângulos.

O controle ProgressBar que acompanha o Microsoft Visual translation from VPE for Csharp suporta somente a configuração padrão.

O código de exemplo neste artigo ilustra como criar um controle que suporte as seguintes propriedades:
  • mínimo . Esta propriedade obtém ou define o valor inferior para o intervalo de valores válidos para o andamento. O valor padrão dessa propriedade é zero (0); você não pode definir essa propriedade para um valor negativo.
  • máximo . Esta propriedade obtém ou define o valor superior para o intervalo de valores válidos para o andamento. O valor padrão dessa propriedade é 100.
  • valor . Essa propriedade obtém ou define o nível atual de andamento. O valor deve estar no intervalo que definem propriedades máxima e mínima .
  • ProgressBarColor . Esta propriedade obtém ou define a cor da barra de progresso.

Criar um controle ProgressBar personalizado

  1. Siga estas etapas para criar um novo projeto Windows Control Library no translation from VPE for Csharp Visual:
    1. Inicie o Microsoft Visual Studio.
    2. No menu arquivo , aponte para novo e, em seguida, clique em Project .
    3. Na caixa de diálogo New Project , clique em translation from VPE for Csharp Visual em Tipos de projeto e, em seguida, clique em Windows Forms Control Library em modelos .

      Observação No Visual Studio .NET 2003, clique em projetos do Visual translation from VPE for Csharp em vez de translation from VPE for Csharp Visual .
    4. Na caixa nome , digite SmoothProgressBar e, em seguida, clique em OK .
    5. No Project Explorer, renomeie o módulo de classe padrão do UserControl1.cs para SmoothProgressBar.cs.
    6. Na janela Properties para o objeto UserControl , altere a propriedade Name de UserControl1 para SmoothProgressBar .
  2. Neste ponto, você normalmente herda a classe do controle e adicione a funcionalidade adicional para estender um controle existente. No entanto, a classe ProgressBar é sealed e não pode ser herdada. Portanto, você deve criar o controle desde o início.

    Adicione o código a seguir ao arquivo SmoothProgressBar.cs, na classe que é derivada de UserControl.

    Observação No Visual Studio .NET 2003, adicione o código ao módulo de classe da classe derivada de UserControl, logo após a seção ? código gerado pelo Windows Form Designer ?.
    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. No menu Build , clique em Build Solution para compilar o projeto.

Criar um aplicativo de cliente de exemplo

  1. No menu arquivo , aponte para novo e, em seguida, clique em Project .
  2. Na caixa de diálogo Add New Project , clique em translation from VPE for Csharp Visual em Project Types , clique em Windows Forms Application em modelos e, em seguida, clique em OK .

    Observação No Visual Studio .NET 2003, clique em projetos do Visual translation from VPE for Csharp em vez de translation from VPE for Csharp Visual .
  3. Siga estas etapas para adicionar duas instâncias do controle SmoothProgressBar ao formulário:
    1. No menu Ferramentas , clique em Choose Toolbox Items .

      Observação No Visual Studio .NET 2003, clique em Customize Toolbox em vez de Choose Toolbox Items .
    2. Clique na guia .NET Framework Components .
    3. Clique em Procurar e localize o arquivo SmoothProgressBar.dll, que você criou na seção "Create a custom ProgressBar control".
    4. Clique em OK . Observe que o controle SmoothProgressBar é adicionado à caixa de ferramentas.
    5. Arraste duas instâncias do controle SmoothProgressBar da caixa de ferramentas para o formulário padrão do projeto Windows Application.
  4. Arraste um controle Timer da caixa de ferramentas para o formulário.
  5. Adicione o seguinte código ao evento Tick do controle Timer :
    if (this.smoothProgressBar1.Value > 0)
    {
    	this.smoothProgressBar1.Value--;
    	this.smoothProgressBar2.Value++;
    }
    else
    {
    	this.timer1.Enabled = false;
    } 
    					
  6. Arraste um controle de botão da caixa de ferramentas para o formulário.
  7. Adicione o seguinte código ao evento Click do controle de botão :
    this.smoothProgressBar1.Value = 100;
    this.smoothProgressBar2.Value = 0;
    			
    this.timer1.Interval = 1;
    this.timer1.Enabled = true; 
    					
  8. No menu Debug , clique em Iniciar para executar o projeto de exemplo.
  9. Clique no botão. Observe que os indicadores de dois progresso exibir o texto "andamento". Um indicador de progresso exibe o progresso de forma crescente e o outro indicador de progresso exibe o progresso em uma diminuição ou uma forma de contagem regressiva.

Propriedades

ID do artigo: 323116 - Última revisão: sexta-feira, 1 de agosto de 2008 - Revisão: 4.1
A informação contida neste artigo aplica-se a:
  • Microsoft Visual C# 2008 Express Edition
  • Microsoft Visual C# 2005 Express Edition
Palavras-chave: 
kbmt kbsweptvs2008 kbhowtomaster KB323116 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 323116

Submeter comentários

 

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