विंडोज फॉर्म प्रोग्रेसबार: मार्की को शुरू / बंद करने का सबसे आसान तरीका?


79

मैं C # और Windows फ़ॉर्म का उपयोग कर रहा हूं। मेरे पास कार्यक्रम में एक सामान्य प्रगति पट्टी है जो ठीक काम करती है, लेकिन अब मेरे पास एक और ऑपरेशन है जहां अवधि की आसानी से गणना नहीं की जा सकती है। मैं एक प्रगति बार प्रदर्शित करना चाहूंगा लेकिन स्क्रॉलिंग मार्की को शुरू / बंद करने का सबसे अच्छा तरीका नहीं जानता। मैं मार्की गति सेट करने और फिर एक शुरुआत () और स्टॉप () के रूप में सरल होने के लिए कुछ के लिए उम्मीद कर रहा था, लेकिन यह उतना आसान नहीं प्रतीत होता है। क्या मुझे पृष्ठभूमि में एक खाली लूप चलाना होगा? मैं इसे कैसे करूं? धन्यवाद


3
यहां प्रगति बार प्रकार msdn.microsoft.com/en-us/library/windows/desktop/aa511486.aspx
मैथ्यू लॉक

जवाबों:


114

शैली सेट के साथ प्रगति पट्टी का उपयोग करें Marquee। यह एक अनिश्चित प्रगति पट्टी का प्रतिनिधित्व करता है।

myProgressBar.Style = ProgressBarStyle.Marquee;

आप MarqueeAnimationSpeedप्रॉपर्टी का उपयोग यह निर्धारित करने के लिए भी कर सकते हैं कि आपकी प्रगति पट्टी के दौरान रंग के छोटे ब्लॉक को चेतन में कितना समय लगेगा।


27
यदि 'विज़ुअल स्टाइल्स' सक्षम नहीं हैं, तो Marqueeरेंडर नहीं होगा। उपयोग सक्षम करने केApplication.EnableVisualStyles();
Pooven

57

एनीमेशन शुरू / बंद करने के लिए, आपको यह करना चाहिए:

शुरू करना:

progressBar1.Style = ProgressBarStyle.Marquee;
progressBar1.MarqueeAnimationSpeed = 30;

रोकने के लिए:

progressBar1.Style = ProgressBarStyle.Continuous;
progressBar1.MarqueeAnimationSpeed = 0;

7
आपको MarqueeAnimationSpeedइसे रोकते समय सेट करने की आवश्यकता नहीं है, और इसे शुरू करते समय, इसका आमतौर पर एक उचित मूल्य होता है। शुरू करने पर हर बार इसे सेट करने की आवश्यकता नहीं है।
icktoofay

9

यह नहीं है कि वे कैसे काम करते हैं। आप एक मार्की स्टाइल प्रगति पट्टी को "शुरू" करते हैं, इसे दृश्यमान बनाते हुए, आप इसे छिपाकर रोकते हैं। आप शैली गुण बदल सकते हैं।


8

यह कोड एक लॉगिन फ़ॉर्म का एक हिस्सा है जहां उपयोगकर्ता प्रमाणीकरण सर्वर की प्रतिक्रिया का इंतजार करते हैं।

using System;
using System.ComponentModel;
using System.Threading;
using System.Windows.Forms;

namespace LoginWithProgressBar
{
    public partial class TheForm : Form
    {
        // BackgroundWorker object deals with the long running task
        private readonly BackgroundWorker _bw = new BackgroundWorker();

        public TheForm()
        {
            InitializeComponent();

            // set MarqueeAnimationSpeed
            progressBar.MarqueeAnimationSpeed = 30;

            // set Visible false before you start long running task
            progressBar.Visible = false;

            _bw.DoWork += Login;
            _bw.RunWorkerCompleted += BwRunWorkerCompleted;
        }

        private void BwRunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            // hide the progress bar when the long running process finishes
            progressBar.Hide();
        }

        private static void Login(object sender, DoWorkEventArgs doWorkEventArgs)
        {
            // emulate long (3 seconds) running task
            Thread.Sleep(3000);
        }

        private void ButtonLoginClick(object sender, EventArgs e)
        {
            // show the progress bar when the associated event fires (here, a button click)
            progressBar.Show();

            // start the long running task async
            _bw.RunWorkerAsync();
        }
    }
}    

2

MSDN पर इस विषय पर कोड के साथ एक अच्छा लेख है । मैं यह मान रहा हूँ कि ProgressBarStyle.Marquee को स्टाइल प्रॉपर्टी सेट करना उचित नहीं है (या यह कि आप क्या नियंत्रित करने की कोशिश कर रहे हैं ?? - मुझे नहीं लगता कि इस एनीमेशन को रोकना / शुरू करना संभव है, हालांकि आप गति को नियंत्रित कर सकते हैं जैसा @Paul इंगित करता है)।


2

कई अच्छे जवाब यहाँ पहले से ही हैं, हालाँकि आपको यह भी ध्यान रखना होगा कि यदि आप यूआई थ्रेड (आमतौर पर एक बुरा विचार) पर लंबे समय से चल रहे प्रसंस्करण कर रहे हैं, तो आप मार्की को या तो नहीं देखेंगे।


-3

आप एक टाइमर (System.Windows.Forms.Timer) का उपयोग कर सकते हैं ।

हुक यह टिक घटना है, अग्रिम तब तक प्रगति बार जब तक यह अधिकतम मूल्य तक नहीं पहुंचता। जब यह (अधिकतम हिट) करता है और आपने काम पूरा नहीं किया है, तो प्रगति बार मान को न्यूनतम पर रीसेट करें।

... बिल्कुल विंडोज एक्सप्लोरर की तरह :-)


2
यह "प्रगति को पुनरारंभ न करें" का उल्लंघन है। और बुरा यूआई / यूएक्स। देखें: msdn.microsoft.com/en-us/library/windows/desktop/…
Urbanhusky
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.