Étant donné que les réponses précédentes ne semblent pas fonctionner avec les styles visuels. Vous devrez probablement créer votre propre classe ou étendre la barre de progression:
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);
}
}
EDIT: code mis à jour pour que la barre de progression utilise le style visuel pour l'arrière-plan
OK, il m'a fallu un certain temps pour lire toutes les réponses et les liens. Voici ce que j'en ai retiré:
Exemples de résultats
La réponse acceptée désactive les styles visuels, elle vous permet de définir la couleur à ce que vous voulez, mais le résultat semble clair:
En utilisant la méthode suivante, vous pouvez obtenir quelque chose comme ceci à la place:
Comment
Tout d'abord, incluez ceci si vous ne l'avez pas fait:
using System.Runtime.InteropServices;
Deuxièmement, vous pouvez soit créer cette nouvelle classe, soit placer son code dans une
static
classe non générique existante :Maintenant, pour l'utiliser, appelez simplement:
progressBar1.SetState(2);
Notez le deuxième paramètre dans SetState, 1 = normal (vert); 2 = erreur (rouge); 3 = avertissement (jaune).
J'espère que ça aide!
la source
public const uint PBM_SETSTATE = 0x0410; // 1040
Ceci est une version sans scintillement du code le plus accepté que vous pouvez trouver comme réponses à cette question. Tout le crédit aux affiches de ces réponses fatastiques. Merci Dusty, Chris, Matt et Josh!
Comme la demande de "Fueled" dans l'un des commentaires, j'avais également besoin d'une version qui se comporte un peu plus ... professionnellement. Ce code conserve les styles comme dans le code précédent, mais ajoute un rendu d'image hors écran et une mise en mémoire tampon graphique (et supprime correctement l'objet graphique).
Résultat: tout le bien, et pas de scintillement. :)
la source
Dans le concepteur, il vous suffit de définir la propriété ForeColor sur la couleur de votre choix. Dans le cas du rouge, il existe une couleur prédéfinie pour celui-ci.
Pour le faire dans le code (C #), procédez comme suit:
Edit : Oh oui, réglez également le style sur continu. Dans le code, comme ceci:
Une autre modification: vous devrez également supprimer la ligne qui lit
Application.EnableVisualStyles()
dans votreProgram.cs
(ou similaire). Si vous ne pouvez pas faire cela parce que vous voulez que le reste de l'application ait des styles visuels, alors je vous suggère de peindre le contrôle vous-même ou de passer à WPF car ce genre de chose est facile avec WPF. Vous pouvez trouver un tutoriel sur le dessin par le propriétaire d'une barre de progression sur codeplexla source
En utilisant les réponses de Matt Blaine et Chris Persichetti, j'ai créé une barre de progression qui semble un peu plus jolie tout en permettant un choix de couleurs infini (en gros, j'ai changé une ligne dans la solution de Matt):
ProgressBarEx:
Usage:
Résultats
Télécharger
https://skydrive.live.com/?cid=0EDE5D21BDC5F270&id=EDE5D21BDC5F270%21160&sc=documents#
la source
LinearGradientBrush
lecture de la largeur de rec comme 0. La solution la plus simple est de ne pas faire le "padding" de 4px dans le code et de le placer à la place dans un panneau ou quelque chose avec un rembourrage (si vous voulez une frontière) et de fairerec.Width = (int)((rec.Width * scaleFactor) - 4)
enrec.Width = (int)(rec.Width * scaleFactor) + 1
Modification de la réponse de dustyburwell. (Je n'ai pas assez de représentants pour le modifier moi-même.) Comme sa réponse, cela fonctionne avec les "Styles visuels" activés. Vous pouvez simplement définir la propriété ForeColor de la barre de progression dans la vue de conception du formulaire.
la source
Je viens de mettre cela dans une classe statique.
J'espère que ça aide,
Marc
la source
Habituellement, la barre de progression a un thème ou respecte les préférences de couleur de l'utilisateur. Donc, pour changer la couleur, vous devez soit désactiver les styles visuels et définir
ForeColor
ou dessiner le contrôle vous-même.En ce qui concerne le style continu au lieu de blocs, vous pouvez définir la
Style
propriété:la source
ÉDITER
Par le son des choses, vous utilisez le thème XP qui a la barre de programme basée sur le bloc vert. Essayez de basculer votre style d'interface utilisateur vers Windows Classic et testez à nouveau, mais vous devrez peut-être implémenter votre propre événement OnPaint pour qu'il fasse ce que vous voulez dans tous les styles d'interface utilisateur
Ou comme quelqu'un d'autre l'a souligné, désactivez les VisualStyles pour votre application.
Original
Autant que je sache, le rendu de la barre de progression se fait en ligne avec le style de thème Windows que vous avez choisi (win2K, xp, vista)
Vous pouvez changer la couleur en définissant la propriété
Je ne suis pas sûr que vous puissiez faire beaucoup plus cependant ...
fait quelques recherches sur Google
Theres un article ici de MS KB sur la création d'une barre de progression "lisse"
http://support.microsoft.com/kb/323116
la source
essayez d'utiliser le message PBM_SETBARCOLOR, cela devrait faire l'affaire avec SendMessage
Voir http://www.vbforums.com/showthread.php?t=248721 pour un exemple.
la source
Toutes ces méthodes ne fonctionnent pas pour moi, mais cette méthode vous permet de la changer en une chaîne de couleur.
Veuillez noter que j'ai trouvé ce code ailleurs sur StackOverflow et que je l'ai un peu changé. Depuis, j'ai oublié où j'ai trouvé ce code et je ne peux pas le lier à cause de cela, désolé pour cela.
Mais de toute façon j'espère que ce code aide quelqu'un, il m'a vraiment aidé.
Lorsque le nom "ProgressBar" est utilisé, remplacez-le par votre propre nom de barre de progression. Vous pouvez également déclencher cet événement avec d'autres arguments, assurez-vous simplement qu'il est entre crochets quelque part.
la source
Changement
Color
etValue
(changement instantané)Mettre
using System.Runtime.InteropServices;
en haut ...Appeler avec
ColorBar.SetState(progressBar1, ColorBar.Color.Yellow, myValue);
J'ai remarqué que si vous modifiez la valeur de la barre (sa taille), elle ne changera pas si elle est dans une couleur autre que le vert par défaut. J'ai pris le code de user1032613 et ajouté une option Value.
la source
pBar.Value = pBar.Maximum;
et à l'SendMessage(pBar.Handle, 1040, (IntPtr)(int)Color.Green, IntPtr.Zero);
intérieur du corps de la condition pour que la progression montre la nouvelle couleur correcte.Juste au cas où quelqu'un chercherait une autre option ... vous pouvez étendre un panneau, l'utiliser comme arrière-plan (blanc ou autre), ajouter un autre panneau à l'intérieur pour le premier plan (la barre mobile). Ensuite, vous avez un contrôle total sur le changement de couleur, etc.
la source
Cliquez simplement avec le bouton droit sur votre projet dans l'Explorateur de solutions Visual Basic (où se trouvent vos fichiers vb) et sélectionnez les propriétés dans le menu. Dans la fenêtre qui apparaît, désélectionnez "Activer les styles visuels XP" et maintenant, lorsque vous définissez la couleur, cela devrait fonctionner maintenant.
la source
Tous: Quote: Habituellement, la barre de progression est soit thématique, soit respecte les préférences de couleur de l'utilisateur. Donc, pour changer la couleur, vous devez soit désactiver les styles visuels et définir
ForeColor
ou dessiner le contrôle vous-même.En ce qui concerne le style continu au lieu de blocs, vous pouvez définir la
Style
propriété:ProgressBarStyle.Continuous versus Blocks est inutile avec VistualStyles activé ...
Les blocs ne fonctionneront qu'avec les styles visuels désactivés ... ce qui rend tout cela un point discutable (en ce qui concerne la couleur de progression personnalisée) Avec les styles virtuels désactivés ... la barre de progression doit être colorée en fonction de la couleur avant.
J'ai utilisé une combinaison de la réponse de William Daniel (avec les styles visuels activés, donc le ForeColor ne sera pas simplement plat sans style) et la réponse de Barry (au texte personnalisé sur la barre de progression) de: Comment mettre du texte sur ProgressBar?
la source
Barre verticale UP For Down de couleur rouge:
la source
La barre de progression colorée VB.Net qui respecte la réponse des styles visuels WXP est ...
J'ai commencé avec la réponse de 'user1032613' le 17/03/12. Notez que c'est maintenant un module, pas une classe. À partir de là, j'ai converti le code, mais il en fallait plus. En particulier, le code converti montrait une fonction DirectCast pour convertir l'entier «state» en un type IntPtr qui ne fonctionnait pas.
Et encore une fois, appelez simplement ceci dans le code d'utilisation avec cette ligne:
BTW - J'ai essayé d'autres couleurs - 0, 4, 5 - elles affichent toutes simplement du vert.
la source
Je sais que c'est trop vieux pour qu'on y réponde maintenant ... mais quand même, un petit ajustement à @ la réponse Daniel pour corriger le problème de ne pas afficher la barre de progression à valeur nulle. Dessinez simplement la progression uniquement si la largeur du rectangle intérieur est non nulle.
Merci à tous les contributeurs.
la source
J'ai trouvé que cela pouvait être fait en dessinant un rectangle à l'intérieur de la barre de progression et en définissant sa largeur en fonction de la valeur actuelle de la progression. J'ai également ajouté un support pour les progrès de droite à gauche. De cette façon, vous n'avez pas besoin d'utiliser l'image, et comme Rectnalge.Inflate n'est pas appelé, le rectangle dessiné est plus petit.
la source
Je pense que les solutions les plus simples de toutes, ce n'est qu'une solution rapide, mais vous pouvez supprimer, commenter Application.EnableVisualStyles () de Program.cs, ou comment vous avez nommé la partie contenant la fonction Main. Après cela, vous pouvez librement changer la couleur de la barre de progression par progressBar.ForeColor = Color.TheColorYouDesire;
la source
Edit: dans les deux minuites, il m'a fallu lancer vs et vérifier la syntaxe que j'ai été battue avec de bien meilleures réponses. j'adore ce site.
la source