Como criar uma barra de progresso suave no Visual c#

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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática… erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 323116
Para obter uma versão do Microsoft Visual Basic .NET do presente artigo, consulte 323088.
Sumário
Este artigo demonstra como criar um UserControl simples e personalizado para criar um bom controlo de deslocamento suave da ProgressBar .

Em versões anteriores do controlo ProgressBar , tal como a versão que é fornecido com o controlo ActiveX de controlos comuns do Microsoft Windows, pode ver o progresso em duas vistas diferentes. Para controlar estas vistas, utilize a propriedade de deslocamento , que inclui as definições padrão e suaves. Deslocação de ecrã produz um bloco sólido de cor que representa o progresso e deslocamento padrão aparece segmentada e é constituído por uma série de blocos de pequenos ou rectângulos.

O controlo de ProgressBar incluído com o Microsoft Visual c# suporta apenas a definição padrão.

O código de exemplo neste artigo ilustra como criar um controlo que suporta as seguintes propriedades:
  • Mínimo. Esta propriedade obtém ou define o valor inferior para o intervalo de valores válidos para o progresso. O valor predefinido desta propriedade é igual a zero (0); Não é possível definir esta 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 progresso. O valor predefinido desta propriedade é de 100.
  • Valor. Esta propriedade obtém ou define o nível actual de progresso. O valor deve estar no intervalo que definem o mínimo e as propriedades de máximo .
  • ProgressBarColor. Esta propriedade obtém ou define a cor da barra de progresso.

Criar um controlo de ProgressBar personalizado

  1. Siga estes passos para criar um novo projecto de biblioteca de controlos do Windows no Visual c#:
    1. Inicie o Microsoft Visual Studio.
    2. No menu ficheiro , aponte para Novoe, em seguida, clique em projecto.
    3. Na caixa de diálogo Novo projecto , clique em Visual c# em Tipos de projectoe, em seguida, clique em Biblioteca de controlos de formulários do Windows em modelos.

      Nota No Visual Studio .NET 2003, clique em Projectos do Visual c# , em vez do Visual c#.
    4. Na caixa nome , escreva SmoothProgressBare, em seguida, clique em OK.
    5. No Explorador de projecto, mude o nome do módulo de classe predefinido a partir de UserControl1.cs para SmoothProgressBar.cs.
    6. Na janela Propriedades para o objecto UserControl , altere a propriedade de nome de UserControl1 para SmoothProgressBar.
  2. Neste ponto, normalmente é herdada da classe desse controlo e, em seguida, adicionar a funcionalidade adicional para expandir um controlo existente. No entanto, a classe de ProgressBarselados e não pode ser herdada. Por conseguinte, tem de criar o controlo desde o início.

    Adicione o seguinte código para o ficheiro de SmoothProgressBar.cs, na classe que deriva de UserControl.

    Nota No Visual Studio .NET 2003, adicione o código do módulo de classe da classe UserControl derivado, imediatamente após a secção "Windows Form Designer gerado código".
    int min = 0;	// Minimum value for progress rangeint max = 100;	// Maximum value for progress rangeint val = 0;		// Current progressColor BarColor = Color.Blue;		// Color of progress meterprotected 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 de criação , clique em Build Solution para compilar o projecto.

Criar uma aplicação de cliente de exemplo

  1. No menu ficheiro , aponte para Novoe, em seguida, clique em projecto.
  2. Na caixa de diálogo Adicionar novo projecto , clique em Visual c# em Tipos de projecto, clique em Aplicação do Windows Forms em modelose, em seguida, clique em OK.

    Nota No Visual Studio .NET 2003, clique em Projectos do Visual c# , em vez do Visual c#.
  3. Siga estes passos para adicionar duas instâncias do controlo SmoothProgressBar ao formulário:
    1. No menu Ferramentas , clique em Escolher itens da caixa de ferramentas.

      Nota No Visual Studio .NET 2003, clique em Personalizar a caixa de ferramentas em vez de Escolher itens da caixa de ferramentas.
    2. Clique no separador de Componentes do .NET Framework .
    3. Clique em Procurare, em seguida, localize o ficheiro de SmoothProgressBar.dll, que criou no "Criar um controlo de ProgressBar personalizado"secção.
    4. Clique em OK. Repare que o controlo de SmoothProgressBar é adicionado à caixa de ferramentas.
    5. Arraste duas instâncias do controlo SmoothProgressBar da caixa de ferramentas para o formulário predefinido do projecto de aplicação do Windows.
  4. Arraste um controlo de temporizador da caixa de ferramentas para o formulário.
  5. Adicione o seguinte código ao evento de escala do temporizador de controlo:
    if (this.smoothProgressBar1.Value > 0){	this.smoothProgressBar1.Value--;	this.smoothProgressBar2.Value++;}else{	this.timer1.Enabled = false;} 					
  6. Arraste um controlo de botão da caixa de ferramentas para o formulário.
  7. Adicione o seguinte código ao evento do controlo de botãoclique em :
    this.smoothProgressBar1.Value = 100;this.smoothProgressBar2.Value = 0;			this.timer1.Interval = 1;this.timer1.Enabled = true; 					
  8. No menu Depurar , clique em Iniciar para executar o projecto de exemplo.
  9. Clique no botão. Repare que os indicadores de dois progresso apresentam o texto "curso". Um indicador de progresso mostra o progresso de forma crescente e o indicador de progresso mostra o progresso numa diminuição ou de uma forma de contagem decrescente.

Aviso: Este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 323116 - Última Revisão: 07/25/2015 14:23:00 - Revisão: 5.0

Microsoft Visual C# 2008 Express Edition, Microsoft Visual C# 2005 Express Edition

  • kbsweptvs2008 kbhowtomaster kbmt KB323116 KbMtpt
Comentários