दिलचस्प पोस्ट
FindViewByID रिटर्न शून्य एक एमवीवीएम मित्रवत संवाद रणनीति बनाना प्रपत्र प्रमाणीकरण डिफ़ॉल्ट दस्तावेज़ को अनदेखा कर रहा है Google Translate TTS एपीआई अवरुद्ध मैं जावा प्रिंट उद्धरण कैसे बना सकता हूं, जैसे "हैलो"? psql: FATAL: भूमिका "पोस्टग्रेज़" मौजूद नहीं है ':' (कोलन) जावास्क्रिप्ट में क्या करता है? NSString ऑब्जेक्ट की अधिकतम लंबाई क्या है? ऑप्टिकल प्रवाह का उपयोग करके ओपनसीवी ट्रैकिंग जांच रहा है कि कोई पायथन पायथन में एक प्रमुख संख्या है PHP एसोसिएटिव सरणियों के साथ कार्टेशियन उत्पाद ढूँढना प्रिंट स्टेटमेंट का उपयोग करके वीएआरएआरएआर (मैक्स) कैसे मुद्रित करें? इकाई परीक्षण और एकीकरण परीक्षण के बीच अंतर क्या है? नियमित अभिव्यक्ति में, बैक-ट्रैकिंग / बैक रेफ्रेंसिंग क्या है? अजगर में एक साइट पिंग?

सी # .NET 3.5 में प्रगति पट्टी का रंग कैसे बदल सकता है?

मैं अपनी प्रगति पट्टी पर दो चीजों को करना चाहता हूं।

  1. हरे रंग को लाल रंग में बदलें
  2. ब्लॉक निकालें और इसे एक रंग में बनाएं।

उन दो चीजों के बारे में कोई जानकारी जो मुझे आश्चर्य है कि कैसे पूरा करने के लिए महान होगा appreciciated!

धन्यवाद।

Solutions Collecting From Web of "सी # .NET 3.5 में प्रगति पट्टी का रंग कैसे बदल सकता है?"

चूंकि पिछले जवाब दृश्य शैलियों के साथ में काम करने के लिए प्रकट नहीं होते हैं आपको शायद अपना स्वयं का वर्ग बनाने या प्रगति पट्टी का विस्तार करने की आवश्यकता होगी:

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); } } 

संपादित करें: प्रगति बार पृष्ठभूमि के लिए दृश्य शैली का उपयोग करने के लिए अद्यतन कोड

ठीक है, मुझे कुछ समय के लिए उत्तर और लिंक पढ़ने के लिए कुछ समय लगा। यहां बताया गया है कि मैं उनमें से क्या मिला:

नमूना परिणाम

स्वीकार किए जाते हैं जवाब दृश्य शैलियों को अक्षम करता है, यह आपको किसी भी चीज़ को रंग सेट करने की अनुमति देता है, लेकिन परिणाम सादे दिखता है:

यहां छवि विवरण दर्ज करें

निम्न पद्धति का उपयोग करके, आप इसके बजाय कुछ ऐसा प्राप्त कर सकते हैं:

यहां छवि विवरण दर्ज करें

कैसे

सबसे पहले, यह शामिल करें यदि आपके पास नहीं है: using System.Runtime.InteropServices;

दूसरा, आप या तो यह नया वर्ग बना सकते हैं, या इसके कोड को मौजूदा static गैर-सामान्य वर्ग में डाल सकते हैं:

 public static class ModifyProgressBarColor { [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)] static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr w, IntPtr l); public static void SetState(this ProgressBar pBar, int state) { SendMessage(pBar.Handle, 1040, (IntPtr)state, IntPtr.Zero); } } 

अब, इसका उपयोग करने के लिए, बस कॉल करें:

ModifyProgressBarColor.SetState(progressBar1, 2);

SetState में दूसरे पैरामीटर को नोट करें, 1 = सामान्य (हरा); 2 = त्रुटि (लाल); 3 = चेतावनी (पीला)

आशा करता हूँ की ये काम करेगा!

यह सबसे स्वीकृत कोड का एक झिलमिलाहट मुक्त संस्करण है जिसे आप इस प्रश्न के उत्तर के रूप में पा सकते हैं। उन भयंकर उत्तरों के पोस्टर के लिए सभी क्रेडिट। धन्यवाद डस्टी, क्रिस, मैट, और जोश!

टिप्पणियों में से एक में "ईंधन" का अनुरोध की तरह, मुझे एक ऐसा संस्करण भी था जिसने कुछ और व्यवहार किया … पेशेवर यह कोड पिछले कोड के रूप में शैलियों का रखरखाव करता है, लेकिन एक ऑफस्क्रीन छवि रेंडर और ग्राफिक्स बफ़रिंग (और ग्राफ़िक्स ऑब्जेक्ट को सही तरीके से निकालता है) जोड़ता है

परिणाम: सभी अच्छे, और कोई झिलमिलाना नहीं। 🙂

 public class NewProgressBar : ProgressBar { public NewProgressBar() { this.SetStyle(ControlStyles.UserPaint, true); } protected override void OnPaintBackground(PaintEventArgs pevent) { // None... Helps control the flicker. } protected override void OnPaint(PaintEventArgs e) { const int inset = 2; // A single inset value to control teh sizing of the inner rect. using (Image offscreenImage = new Bitmap(this.Width, this.Height)) { using (Graphics offscreen = Graphics.FromImage(offscreenImage)) { Rectangle rect = new Rectangle(0, 0, this.Width, this.Height); if (ProgressBarRenderer.IsSupported) ProgressBarRenderer.DrawHorizontalBar(offscreen, rect); rect.Inflate(new Size(-inset, -inset)); // Deflate inner rect. rect.Width = (int)(rect.Width * ((double)this.Value / this.Maximum)); if (rect.Width == 0) rect.Width = 1; // Can't draw rec with width of 0. LinearGradientBrush brush = new LinearGradientBrush(rect, this.BackColor, this.ForeColor, LinearGradientMode.Vertical); offscreen.FillRectangle(brush, inset, inset, rect.Width, rect.Height); e.Graphics.DrawImage(offscreenImage, 0, 0); offscreenImage.Dispose(); } } } } 

डिजाइनर में, आप को आप जो भी रंग चाहते हैं, उसे ForeColor संपत्ति सेट करने की आवश्यकता है लाल के मामले में, उसके लिए एक पूर्वनिर्धारित रंग है

इसे कोड (सी #) में करने के लिए ऐसा करें:

 pgs.ForeColor = Color.Red; 

संपादित करें : ओह, हाँ, यह भी स्टाइल को लगातार सेट करें कोड में, इस तरह:

 pgs.Style = System.Windows.Forms.ProgressBarStyle.Continuous; 

एक और संपादित करें: आपको अपने Program.cs (या समान) से Application.EnableVisualStyles() Program.cs जाने वाली लाइन को निकालना होगा। यदि आप ऐसा नहीं कर सकते क्योंकि आप बाकी एप्लिकेशन को विज़ुअल शैलियों के लिए चाहते हैं, तो मैं अपने नियंत्रण को पेंट करने का सुझाव देता हूं या WPF पर जा रहा हूं क्योंकि इस तरह की चीज़ WPF के साथ आसान है। आप कोडप्लेक्स पर एक प्रगति पट्टी ड्राइंग करने वाले स्वामी पर एक ट्यूटोरियल पा सकते हैं

डेसिबरव्यूवेल के उत्तर के लिए संशोधित (मेरे पास इसे संपादित करने के लिए पर्याप्त प्रतिनिधि नहीं है।) अपने जवाब की तरह, यह "दृश्य शैली" सक्षम के साथ काम करता है आप किसी भी रूप के डिज़ाइन दृश्य में बस प्रगति पट्टी के ForeColor संपत्ति को सेट कर सकते हैं।

 using System; using System.Windows.Forms; using System.Drawing; public class ProgressBarEx : ProgressBar { private SolidBrush brush = null; public ProgressBarEx() { this.SetStyle(ControlStyles.UserPaint, true); } protected override void OnPaint(PaintEventArgs e) { if (brush == null || brush.Color != this.ForeColor) brush = new SolidBrush(this.ForeColor); Rectangle rec = new Rectangle(0, 0, this.Width, this.Height); if (ProgressBarRenderer.IsSupported) ProgressBarRenderer.DrawHorizontalBar(e.Graphics, rec); rec.Width = (int)(rec.Width * ((double)Value / Maximum)) - 4; rec.Height = rec.Height - 4; e.Graphics.FillRectangle(brush, 2, 2, rec.Width, rec.Height); } } 

मैट ब्लेन और क्रिस प्रेसेटीटी के जवाबों का उपयोग करके मैंने एक प्रगति पट्टी बनाई है जो अनंत रंग पसंद की अनुमति देते हुए थोड़ा सा अच्छा दिखता है (मूलतः मैंने मैट के समाधान में एक पंक्ति बदल दी है):

ProgressBarEx:

 using System; using System.Windows.Forms; using System.Drawing; using System.Drawing.Drawing2D; namespace QuantumConcepts.Common.Forms.UI.Controls { public class ProgressBarEx : ProgressBar { public ProgressBarEx() { this.SetStyle(ControlStyles.UserPaint, true); } protected override void OnPaint(PaintEventArgs e) { LinearGradientBrush brush = null; Rectangle rec = new Rectangle(0, 0, this.Width, this.Height); double scaleFactor = (((double)Value - (double)Minimum) / ((double)Maximum - (double)Minimum)); if (ProgressBarRenderer.IsSupported) ProgressBarRenderer.DrawHorizontalBar(e.Graphics, rec); rec.Width = (int)((rec.Width * scaleFactor) - 4); rec.Height -= 4; brush = new LinearGradientBrush(rec, this.ForeColor, this.BackColor, LinearGradientMode.Vertical); e.Graphics.FillRectangle(brush, 2, 2, rec.Width, rec.Height); } } } 

उपयोग:

 progressBar.ForeColor = Color.FromArgb(255, 0, 0); progressBar.BackColor = Color.FromArgb(150, 0, 0); 

परिणाम

आप अपनी पसंद के किसी भी ढाल का उपयोग कर सकते हैं!

डाउनलोड

https://skydrive.live.com/?cid=0EDE5D21BDC5F270&id=EDE5D21BDC5F270%21160&sc=documents#

मैं सिर्फ एक स्थिर वर्ग में डाल दिया।

  const int WM_USER = 0x400; const int PBM_SETSTATE = WM_USER + 16; const int PBM_GETSTATE = WM_USER + 17; [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)] static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam); public enum ProgressBarStateEnum : int { Normal = 1, Error = 2, Paused = 3, } public static ProgressBarStateEnum GetState(this ProgressBar pBar) { return (ProgressBarStateEnum)(int)SendMessage(pBar.Handle, PBM_GETSTATE, IntPtr.Zero, IntPtr.Zero); } public static void SetState(this ProgressBar pBar, ProgressBarStateEnum state) { SendMessage(pBar.Handle, PBM_SETSTATE, (IntPtr)state, IntPtr.Zero); } 

आशा करता हूँ की ये काम करेगा,

न घुलनेवाली तलछट

आम तौर पर प्रगति पट्टी या तो उपयोगकर्ता के रंग वरीयताओं को आधारित या सम्मानित करती है। इसलिए रंग बदलने के लिए आपको दृश्य शैलियों को बंद करने और ForeColor सेट करने की आवश्यकता है या नियंत्रण खुद को खींचें।

ब्लॉकों के बजाय निरंतर शैली के लिए आप Style संपत्ति सेट कर सकते हैं:

 pBar.Style = ProgressBarStyle.Continuous; 

संपादित करें

चीजों की आवाज़ों से आप एक्सपी थीम का उपयोग कर रहे हैं जिसमें हरे रंग ब्लॉक आधारित प्रोग्राम-बार है। अपनी यूआई शैली को विंडोज क्लासिक में फ्लिप करने और फिर से परीक्षण करने की कोशिश करें, लेकिन आपको अपनी स्वयं की OnPaint इवेंट को कार्यान्वित करने की ज़रूरत हो सकती है ताकि वह सभी यूआई शैलियों में आप क्या करना चाहें।

या किसी और व्यक्ति ने इशारा किया है, आपके ऐप्लिकेशन के लिए विजुअलस्टाइल को अक्षम करें।

मूल

जहाँ तक मुझे पता है, प्रगति पट्टी का रेंडर विंडोज़ थीम शैली के साथ इनलाइन होता है जिसे आपने चुना है (win2k, xp, vista)

आप संपत्ति को सेट करके रंग बदल सकते हैं

 ProgressBar.ForeColor 

मुझे यकीन नहीं है कि आप अधिक कर सकते हैं लेकिन …

कुछ गोगलिंग करता है

एक "चिकनी" प्रगति बार बनाने पर एमएस केबी से एक लेख यहां है

http://support.microsoft.com/kb/323116

मैं आपको CodeProject: प्रगति-ओ-कयामत पर इस लेख को देखने के लिए सुझाव देता हूं। यह बहुत अच्छा है!

बस किसी और विकल्प के लिए कोई दूसरा विकल्प तलाशता है …. आप एक पैनल का विस्तार कर सकते हैं, इसे पृष्ठभूमि (सफेद या जो भी) के रूप में उपयोग करें, अग्रभूमि (चलती पट्टी) के लिए इसके अंदर एक और पैनल जोड़ें। फिर आपके पास रंग, आदि को बदलने का पूरा नियंत्रण है

बस Visual Basic Solution Explorer (जहां आपके vb फाइल हैं) में प्रोजेक्ट पर राइट क्लिक करें और मेन्यू से गुणों का चयन करें। पॉप अप करने वाली विंडो में "XP दृश्य शैलियां सक्षम करें" को अचयनित करें और अब जब आप फ़ोरक्लोर सेट करते हैं, तो अब उसे काम करना चाहिए।

messsage PBM_SETBARCOLOR का उपयोग करने का प्रयास करें, जिसे SendMessage के साथ चाल करना चाहिए

उदाहरण के लिए http://www.vbforums.com/showthread.php?t=248721 देखें।

ये सभी विधियां मेरे लिए काम करने में विफल रही हैं लेकिन इस पद्धति से आप इसे एक रंग स्ट्रिंग में बदल सकते हैं।

कृपया ध्यान दें कि मैंने इस कोड को कहीं और स्टैक ओवरफ्लो पर पाया और इसे थोड़ा बदल दिया। जब से मैं यह कोड भूल गया था, तब से मैं भूल गया हूं और इसके कारण उस के लिए मुझे इतना दुःख नहीं मिला है।

लेकिन वैसे भी मुझे उम्मीद है कि यह कोड किसी को वास्तव में मेरी सहायता करने में मदद करता है

 private void ProgressBar_MouseDown(object sender, MouseButtonEventArgs e) { var converter = new System.Windows.Media.BrushConverter(); var brush = (Brush)converter.ConvertFromString("#FFB6D301"); ProgressBar.Foreground = brush; } 

जहां नाम "प्रगति बबार" का प्रयोग किया जाता है, अपनी स्वयं की प्रगति बार नाम के साथ बदलें। आप इस घटना को अन्य तर्कों के साथ भी ट्रिगर कर सकते हैं, बस यह सुनिश्चित करें कि कहीं इसके अंदर की कोष्ठक

Color और Value बदलें (तुरंत परिवर्तन)

using System.Runtime.InteropServices; रखो using System.Runtime.InteropServices; शिखर पर…

ColorBar.SetState(progressBar1, ColorBar.Color.Yellow, myValue); बुलाओ ColorBar.SetState(progressBar1, ColorBar.Color.Yellow, myValue);

मैंने देखा कि यदि आप बार का मान बदलते हैं (यह कितना बड़ा है) तो यह तब नहीं बदलेगा जब यह डिफ़ॉल्ट हरे रंग के अलावा किसी अन्य रंग में हो। मैंने उपयोगकर्ता 1032613 का कोड लिया और एक वैल्यू विकल्प जोड़ा।

 public static class ColorBar { [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)] static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr w, IntPtr l); public enum Color { None, Green, Red, Yellow } public static void SetState(this ProgressBar pBar, Color newColor, int newValue) { if (pBar.Value == pBar.Minimum) // If it has not been painted yet, paint the whole thing using defualt color... { // Max move is instant and this keeps the initial move from going out slowly pBar.Value = pBar.Maximum; // in wrong color on first painting SendMessage(pBar.Handle, 1040, (IntPtr)(int)Color.Green, IntPtr.Zero); } pBar.Value = newValue; SendMessage(pBar.Handle, 1040, (IntPtr)(int)Color.Green, IntPtr.Zero); // run it out to the correct spot in default SendMessage(pBar.Handle, 1040, (IntPtr)(int)newColor, IntPtr.Zero); // now turn it the correct color } } 

उत्तर: उद्धरण: आम तौर पर प्रगति पट्टी या तो उपयोगकर्ता के रंग वरीयताओं को आधारित या सम्मानित करती है। इसलिए रंग बदलने के लिए आपको दृश्य शैलियों को बंद करने और ForeColor सेट करने की आवश्यकता है या नियंत्रण खुद को खींचें।

ब्लॉकों के बजाय निरंतर शैली के लिए आप Style संपत्ति सेट कर सकते हैं:

 pBar.Style = ProgressBarStyle.Continuous; 

ProgressBarStyle.Continuous बनाम ब्लॉक VistualStyles सक्षम के साथ बेकार है …

ब्लॉक केवल दृश्य शैलियों के साथ काम करेंगे … जो कि यह सब एक विवादास्पद बिंदु (कस्टम प्रोद्गंग रंग के संबंध में) को प्रदान करता है vistual शैलियों के साथ अक्षम … प्रगति पट्टी के आधार पर रंग का रंग होना चाहिए

मैंने विलियम डैनियल के उत्तर (दृश्य शैलियों के साथ सक्षम किया था, इसलिए फ़ोरक्लोर सिर्फ कोई शैली के साथ सपाट नहीं होगा) और बैरी का जवाब (प्रगति पट्टी पर कस्टम टेक्स्ट के लिए) के संयोजन का उपयोग किया है: मैं कैसे प्रगति बर्र पर पाठ डाल सकता हूं?

ऊर्ध्वाधर बार यूपी के लिए लाल रंग में नीचे:

 using System; using System.Windows.Forms; using System.Drawing; public class VerticalProgressBar : ProgressBar { protected override CreateParams CreateParams { get { CreateParams cp = base.CreateParams; cp.Style |= 0x04; return cp; } } private SolidBrush brush = null; public VerticalProgressBar() { this.SetStyle(ControlStyles.UserPaint, true); } protected override void OnPaint(PaintEventArgs e) { if (brush == null || brush.Color != this.ForeColor) brush = new SolidBrush(this.ForeColor); Rectangle rec = new Rectangle(0, 0, this.Width, this.Height); if (ProgressBarRenderer.IsSupported) ProgressBarRenderer.DrawVerticalBar(e.Graphics, rec); rec.Height = (int)(rec.Height * ((double)Value / Maximum)) - 4; rec.Width = rec.Width - 4; e.Graphics.FillRectangle(brush, 2, 2, rec.Width, rec.Height); } } 

VB.Net रंगीन प्रगति पट्टी जो डब्लूएक्सपी दृश्य शैलियाँ का सम्मान करता है …

मैंने 3/17/12 को 'user1032613' से जवाब के साथ शुरुआत की ध्यान दें कि यह अब एक मॉड्यूल है, एक वर्ग नहीं है। वहां से मैंने कोड को बदल दिया लेकिन अधिक की जरूरत थी। विशेष रूप से परिवर्तित कोड ने एक 'प्रत्यक्ष' कंट्रोल फ़ंक्शन को 'स्टेट' इंटिजर को एक इंटपेट प्रकार में बदलने के लिए दिखाया, जो काम नहीं कर रहा था।

 Imports System.Runtime.InteropServices Public Module ModifyProgressBarColor Private Declare Function SendMessage Lib "User32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Long) As Long <DllImport("user32.dll", CharSet:=CharSet.Auto, SetLastError:=False)> _ Private Function SendMessage(hWnd As IntPtr, Msg As UInteger, w As IntPtr, l As IntPtr) As IntPtr End Function <System.Runtime.CompilerServices.Extension()> _ Public Sub SetState(pBar As ProgressBar, state As Integer) '-- Convert state as integer to type IntPtr Dim s As IntPtr Dim y As Integer = state s = IntPtr.op_Explicit(y) '-- Modify bar color SendMessage(pBar.Handle, 1040, s, IntPtr.Zero) End Sub End Module 

और फिर इसे इस लाइन के साथ कोड का इस्तेमाल करते हुए कॉल करें:

 Call ModifyProgressBarColor.SetState(prb, 2) 

बीटीडब्लू – मैंने अन्य रंगों की कोशिश की – 0, 4, 5 – वे सब सिर्फ हरे रंग का प्रदर्शन करते थे

मुझे पता है कि अब इसका जवाब बहुत पुराना है .. लेकिन फिर भी, डैनियल के जवाब के लिए एक छोटे से झुकाव, शून्य मूल्य प्रगति बार दिखाए जाने की समस्या को सुधारने के लिए। बस प्रगति को केवल तभी आकर्षित करें जब भीतर की आयत की चौड़ाई गैर-शून्य हो।

सभी योगदानकर्ताओं के लिए धन्यवाद

  public class ProgressBarEx : ProgressBar { public ProgressBarEx() { this.SetStyle(ControlStyles.UserPaint, true); } protected override void OnPaintBackground(PaintEventArgs pevent){} // None... Helps control the flicker. protected override void OnPaint(PaintEventArgs e) { const int inset = 2; // A single inset value to control teh sizing of the inner rect. using (Image offscreenImage = new Bitmap(this.Width, this.Height)) { using (Graphics offscreen = Graphics.FromImage(offscreenImage)) { Rectangle rect = new Rectangle(0, 0, this.Width, this.Height); if (ProgressBarRenderer.IsSupported) ProgressBarRenderer.DrawHorizontalBar(offscreen, rect); rect.Inflate(new Size(-inset, -inset)); // Deflate inner rect. rect.Width = (int)(rect.Width * ((double)this.Value / this.Maximum)); if (rect.Width != 0) { LinearGradientBrush brush = new LinearGradientBrush(rect, this.ForeColor, this.BackColor, LinearGradientMode.Vertical); offscreen.FillRectangle(brush, inset, inset, rect.Width, rect.Height); e.Graphics.DrawImage(offscreenImage, 0, 0); offscreenImage.Dispose(); } } } } } 

संपादित करें: दो minuites में यह मुझे बनाम फायर और वाक्यविन्यास की जांच करने के लिए मुझे बेहतर प्रतिक्रियाओं के साथ यह करने के लिए पीटा गया था मुझे इस साइट से प्यार है

  progressBar1 = new ProgressBar(); progressBar1.ForeColor = Color.Red;