Eu gostaria de fazer duas coisas na minha barra de progresso.
- Mude a cor verde para vermelho.
- Remova os blocos e faça em uma cor.
Qualquer informação sobre essas duas coisas que me pergunto como realizar será muito apreciada!
Obrigado.
Uma vez que as respostas anteriores não parecem funcionar com estilos visuais. Você provavelmente precisará criar sua própria classe ou estender a barra de progresso:
public class NewProgressBar : ProgressBar
{
public NewProgressBar()
{
this.SetStyle(ControlStyles.UserPaint, true);
}
protected override void OnPaint(PaintEventArgs e)
{
Rectangle rec = e.ClipRectangle;
rec.Width = (int)(rec.Width * ((double)Value / Maximum)) - 4;
if(ProgressBarRenderer.IsSupported)
ProgressBarRenderer.DrawHorizontalBar(e.Graphics, e.ClipRectangle);
rec.Height = rec.Height - 4;
e.Graphics.FillRectangle(Brushes.Red, 2, 2, rec.Width, rec.Height);
}
}
EDITAR: código atualizado para fazer a barra de progresso usar o estilo visual para o fundo
OK, demorei um pouco para ler todas as respostas e links. Aqui está o que consegui com eles:
Resultados da amostra
A resposta aceita desativa os estilos visuais, permite que você defina a cor que quiser, mas o resultado parece simples:
Usando o método a seguir, você pode obter algo assim:
Como
Primeiro, inclua se você não tiver:
using System.Runtime.InteropServices;
Em segundo lugar, você pode criar essa nova classe ou colocar seu código em uma
static
classe não genérica existente :Agora, para usá-lo, basta chamar:
progressBar1.SetState(2);
Observe o segundo parâmetro em SetState, 1 = normal (verde); 2 = erro (vermelho); 3 = aviso (amarelo).
Espero que ajude!
fonte
public const uint PBM_SETSTATE = 0x0410; // 1040
Esta é uma versão sem cintilação do código mais aceito que você pode encontrar como resposta a esta pergunta. Todo o crédito para os cartazes dessas respostas fatasticas. Obrigado Dusty, Chris, Matt e Josh!
Assim como o pedido de "Fueled" em um dos comentários, eu também precisava de uma versão que se comportasse um pouco mais ... profissionalmente. Este código mantém os estilos como no código anterior, mas adiciona uma renderização de imagem fora da tela e armazenamento em buffer de gráficos (e descarta o objeto gráfico corretamente).
Resultado: tudo de bom e sem oscilações. :)
fonte
No designer, você só precisa definir a propriedade ForeColor para a cor que desejar. No caso do vermelho, existe uma cor predefinida para ele.
Para fazer isso em código (C #), faça o seguinte:
Edit : Oh yeah, também defina o estilo para contínuo. Em código, como este:
Outra edição: você também precisará remover a linha que lê
Application.EnableVisualStyles()
de seuProgram.cs
(ou similar). Se você não pode fazer isso porque deseja que o restante do aplicativo tenha estilos visuais, sugiro pintar o controle você mesmo ou passar para o WPF, pois esse tipo de coisa é fácil com o WPF. Você pode encontrar um tutorial sobre como o proprietário desenha uma barra de progresso no codeplexfonte
Usando as respostas de Matt Blaine e Chris Persichetti, criei uma barra de progresso que parece um pouco melhor, permitindo uma escolha infinita de cores (basicamente, mudei uma linha na solução de Matt):
ProgressBarEx:
Uso:
Resultados
Baixar
https://skydrive.live.com/?cid=0EDE5D21BDC5F270&id=EDE5D21BDC5F270%21160&sc=documents#
fonte
LinearGradientBrush
leitura da largura de rec como 0. A correção mais fácil é não fazer o "preenchimento" de 4px no código e colocá-lo em um painel ou algo com preenchimento (se você quiser uma borda) e transformandorec.Width = (int)((rec.Width * scaleFactor) - 4)
emrec.Width = (int)(rec.Width * scaleFactor) + 1
Modificação para a resposta de Dustyburwell. (Não tenho representantes suficientes para editar sozinho.) Como sua resposta, funciona com "Estilos visuais" habilitado. Você pode apenas definir a propriedade ForeColor da barra de progresso em qualquer visualização de design do formulário.
fonte
Acabei de colocar isso em uma classe estática.
Espero que ajude,
Marc
fonte
Normalmente, a barra de progresso é temática ou respeita as preferências de cor do usuário. Portanto, para alterar a cor, você precisa desligar os estilos visuais e definir
ForeColor
ou desenhar o controle você mesmo.Quanto ao estilo contínuo em vez de blocos, você pode definir a
Style
propriedade:fonte
EDITAR
Pelo som das coisas, você está usando o Tema XP que tem a barra de programação baseada em blocos verdes. Tente mudar seu estilo de interface do usuário para o Windows Classic e teste novamente, mas pode ser necessário implementar seu próprio evento OnPaint para fazer o que você deseja em todos os estilos de interface do usuário
Ou como alguém apontou, desative os VisualStyles para seu aplicativo.
Original
Pelo que eu sei, a renderização da barra de progresso acontece em linha com o estilo de tema do Windows que você escolheu (win2K, xp, vista)
Você pode alterar a cor definindo a propriedade
Não tenho certeza se você pode fazer muito mais ...
faz alguma pesquisa no Google
Há um artigo aqui do MS KB sobre como criar uma barra de progresso "Suave"
http://support.microsoft.com/kb/323116
fonte
tente usar o messsage PBM_SETBARCOLOR, que deve funcionar com SendMessage
Consulte http://www.vbforums.com/showthread.php?t=248721 para obter um exemplo.
fonte
Todos esses métodos não funcionam para mim, mas este método permite que você altere para uma seqüência de cores.
Observe que encontrei esse código em outro lugar no StackOverflow e o alterei um pouco. Desde então, esqueci onde encontrei este código e não consigo vinculá-lo por causa disso, sinto muito por isso.
Mas, de qualquer forma, espero que este código ajude alguém, ele realmente me ajudou.
Onde o nome "ProgressBar" é usado, substitua pelo nome da sua própria barra de progresso. Você também pode acionar este evento com outros argumentos, apenas certifique-se de que ele esteja entre colchetes em algum lugar.
fonte
Mudança
Color
eValue
(mudança instantânea)Coloque
using System.Runtime.InteropServices;
no topo ...Ligue com
ColorBar.SetState(progressBar1, ColorBar.Color.Yellow, myValue);
Percebi que se você alterar o valor da barra (quão grande ela é), ela não mudará se estiver em uma cor diferente do verde padrão. Peguei o código do user1032613 e adicionei uma opção de valor.
fonte
pBar.Value = pBar.Maximum;
eSendMessage(pBar.Handle, 1040, (IntPtr)(int)Color.Green, IntPtr.Zero);
dentro do corpo-condição para que o progresso mostrasse a nova cor correta.Caso alguém procure outra opção .... você pode estender um Painel, usá-lo como fundo (branco ou qualquer outro), adicionar outro Painel dentro dele para o primeiro plano (a barra móvel). Então você tem controle total ao mudar a cor, etc.
fonte
Simplesmente clique com o botão direito em seu projeto no Visual Basic Solution Explorer (onde estão seus arquivos vb) e selecione propriedades no menu. Na janela que aparece, desmarque "Ativar estilos visuais do XP" e agora, quando você definir forecolor, ele deve funcionar agora.
fonte
Pergunta: Citação: Normalmente, a barra de progresso é temática ou respeita as preferências de cor do usuário. Portanto, para alterar a cor, você precisa desligar os estilos visuais e definir
ForeColor
ou desenhar o controle você mesmo.Quanto ao estilo contínuo em vez de blocos, você pode definir a
Style
propriedade:ProgressBarStyle.Continuous versus Blocks é inútil com VistualStyles habilitado ...
O (s) bloco (s) só funcionarão com estilos visuais desativados ... o que torna tudo isso um ponto discutível (com relação à cor de progresso personalizada). Com estilos de visitas desativados ... a barra de progresso deve ser colorida com base na cor principal.
Usei uma combinação da resposta de William Daniel (com estilos visuais habilitados, para que o ForeColor não fique apenas plano, sem estilo) e a resposta de Barry (para texto personalizado na barra de progresso) de: Como coloco texto na ProgressBar?
fonte
Barra vertical UP For Down na cor vermelha:
fonte
A barra de progresso colorida VB.Net que respeita a resposta dos estilos visuais WXP é ...
Comecei com a resposta de 'user1032613' em 17/03/12. Observe que agora isso é um módulo, não uma classe. A partir daí, converti o código, mas era necessário mais. Em particular, o código convertido mostrou uma função DirectCast para converter o inteiro 'estado' em um tipo IntPtr que não funcionou.
E, novamente, basta chamar isso no código using com esta linha:
BTW - eu tentei outras cores - 0, 4, 5 - todas exibiam apenas verde.
fonte
Eu sei que é muito antigo para ser respondido agora .. mas ainda assim, um pequeno ajuste no @Daniel resposta 's para corrigir o problema de não mostrar zero, barra de progresso valorizado. Apenas desenhe o progresso apenas se a largura do retângulo interno for diferente de zero.
Obrigado a todos os contribuintes.
fonte
Descobri que isso pode ser feito desenhando um retângulo dentro da barra de progresso e definindo sua largura de acordo com o valor atual do progresso. Eu também adicionei suporte para o progresso da direita para a esquerda. Desta forma, você não precisa usar a imagem e, como Rectnalge.Inflate não é chamado, o retângulo desenhado é menor.
fonte
Acho que a solução mais simples de todas, é só um conserto rápido, mas você pode deletar, comentar o Application.EnableVisualStyles () do Program.cs, ou entretanto você tem o nome da parte que contém a função Main. Depois disso, você pode alterar livremente a cor da barra de progresso por progressBar.ForeColor = Color.TheColorYouDesire;
fonte
Edit: nos dois minutos, demorei para acionar o vs e verificar a sintaxe que recebi com respostas muito melhores. eu amo este site.
fonte