2011-10-31 21 views
46

मुझे अपने एप्लिकेशन पर कुछ सेकंड के लिए स्प्लैश स्क्रीन दिखाने की ज़रूरत है। क्या कोई यह जानता है कि इसे कैसे कार्यान्वित किया जाए?विंडोज़ फॉर्म में स्प्लैश स्क्रीन कैसे बनाएं एप्लिकेशन?

सहायता के लिए बहुत सराहना की जाएगी।

+7

+1 की कोशिश करो। मुझे अलग-अलग ब्लॉग और वेबसाइटों से गन्दा कार्यान्वयन हो गया है, लेकिन एक अच्छा व्यक्ति बहुत परेशानी के बाद आया था। सवाल वास्तव में अच्छा है। –

+0

एक और विकल्प है जिसके लिए आपको टाइमर का उपयोग करने या अपने मुख्य रूप में अपने स्प्लैश फ़ॉर्म का संदर्भ रखने की आवश्यकता नहीं है या इसके विपरीत: http://stackoverflow.com/questions/7963275 – Veldmuis

+0

[स्पलैश स्क्रीन उदाहरण] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/2455703/splash-screen-example) –

उत्तर

64

सबसे पहले, अपनी स्प्लैश स्क्रीन को अपनी छवि के साथ एक सीमाहीन, अचल रूप के रूप में बनाएं, प्रारंभ में प्रदर्शित करने के लिए सेट करें स्क्रीन के केंद्र, जिस तरह से आप चाहते हैं रंगीन। यह सब डिजाइनर के भीतर से सेट किया जा सकता है; "गलत"

  • StartPosition संपत्ति में सेट करें "CenterScreen"
  • FormBorderStyle संपत्ति के लिए "कोई नहीं"
  • सेट करने के लिए

    • सेट प्रपत्र के ControlBox, MaximizeBox, MinimizeBox और ShowIcon गुण करने के लिए: विशेष रूप से, आप करना चाहते हैं
    • फॉर्म का न्यूनतम आकार और अधिकतम आकार अपने प्रारंभिक आकार के समान होने के लिए सेट करें।

    फिर, आपको यह तय करने की आवश्यकता है कि इसे कहां दिखाना है और इसे कहां खारिज करना है। इन दो कार्यों को आपके कार्यक्रम के मुख्य स्टार्टअप तर्क के विपरीत पक्षों पर होने की आवश्यकता है। यह आपके एप्लिकेशन के मुख्य() दिनचर्या में हो सकता है, या संभवतः आपके मुख्य एप्लिकेशन फॉर्म के लोड हैंडलर में हो सकता है; जहां भी आप बड़ी महंगी वस्तुएं बना रहे हैं, हार्ड ड्राइव से सेटिंग्स पढ़ रहे हैं, और आमतौर पर मुख्य एप्लिकेशन स्क्रीन डिस्प्ले से पहले दृश्यों के पीछे सामान करने के लिए लंबा समय लेते हैं।

    फिर, आपको बस अपने फॉर्म का एक उदाहरण बनाना है, इसे दिखाएं(), और जब आप अपना स्टार्टअप प्रारंभ करते हैं तो इसका संदर्भ रखें। एक बार आपका मुख्य रूप लोड हो जाने के बाद, बंद करें()।

    यदि आपकी स्प्लैश स्क्रीन पर एक एनिमेटेड छवि होगी, तो विंडो को "डबल-बफर्ड" भी होना होगा, और आपको पूरी तरह से यह सुनिश्चित करने की आवश्यकता होगी कि सभी प्रारंभिक तर्क GUI थ्रेड के बाहर होता है (जिसका अर्थ है कि आप मुख्य रूप से लोड हैंडलर में आपका मुख्य लोडिंग तर्क नहीं हो सकता है; आपको पृष्ठभूमिवर्कर या कुछ अन्य थ्रेडेड रूटीन बनाना होगा।

    +3

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

    +1

    +1। मैंने इसके लिए एक नया एप्लिकेशन लूप (एप्लिकेशन.रुन) और एक सिंगलटन दृष्टिकोण का उपयोग करके यहां एक स्पलैश बनाया है, इसलिए मैं बहुत ही शुरुआत में स्पलैश बना सकता हूं और लॉगिन फॉर्म दिखाए जाने से ठीक पहले इसे बंद कर सकता हूं। –

    +0

    @almMa - मैंने व्यावहारिक रूप से वही काम किया जो मेरे स्प्लैश स्क्रीन कार्यान्वयन का निर्माण करता है, जिसमें कमांड द्वारा स्पष्ट रूप से छिपाने या "बतख" की क्षमता शामिल है या यदि कुछ प्रकार के विंडोज़ (ike विंडोज सुरक्षा लॉगिन संवाद) का पता चला है। – KeithS

    6

    यहाँ कुछ दिशानिर्देश के कदम उठाए जाते हैं ...

    1. सीमारहित प्रपत्र (अपने स्प्लैश स्क्रीन इस हो जाएगा)
    2. आवेदन शुरू पर बनाएँ, (कुछ ही सेकंड के अंतराल के साथ) एक टाइमर शुरू
    3. अपने स्पलैश फार्म
    4. Timer.Tick घटना पर दिखाएँ, टाइमर और करीब स्पलैश प्रपत्र रोक - तो दिखाने के अपने मुख्य आवेदन पत्र

    इसे जाने दो और यदि आप अटक जाते हैं तो वापस आएं और अपनी समस्याओं से संबंधित अधिक विशिष्ट प्रश्न पूछें

    1

    सबसे पहले आप के साथ या सीमा के बिना एक फार्म बनाने चाहिए (सीमा-कम इन बातों के लिए पसंद किया जाता है)

    public class SplashForm : Form 
    { 
        Form _Parent; 
        BackgroundWorker worker; 
        public SplashForm(Form parent) 
        { 
         InitializeComponent(); 
         BackgroundWorker worker = new BackgroundWorker(); 
         this.worker.DoWork += new System.ComponentModel.DoWorkEventHandler(this.worker _DoWork); 
         backgroundWorker1.RunWorkerAsync(); 
         _Parent = parent; 
        } 
        private void worker _DoWork(object sender, DoWorkEventArgs e) 
        { 
         Thread.sleep(500); 
         this.hide(); 
         _Parent.show(); 
        }  
    } 
    

    मुख्य आप का उपयोग करना चाहिए कि

    static class Program 
         { 
          [STAThread] 
          static void Main() 
          { 
           Application.EnableVisualStyles(); 
           Application.SetCompatibleTextRenderingDefault(false); 
           Application.Run(new SplashForm()); 
          } 
         } 
    
    +1

    यह बुरा है। यह आपके स्प्लैशफॉर्म, आपके आवेदन का मुख्य रूप बना देगा। इसका मतलब यह है कि जब आप इसे बंद करते हैं, तो एप्लिकेशन –

    2

    छप बनाने

    private void timer1_Tick(object sender, EventArgs e) 
    { 
        counter++; 
        progressBar1.Value = counter *5; 
        // label2.Text = (5*counter).ToString(); 
        if (counter ==20) 
        { 
         timer1.Stop(); 
         this.Close(); 
        } 
    } 
    this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 
    this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 
    this.BackColor = System.Drawing.SystemColors.GradientInactiveCaption; 
    this.ClientSize = new System.Drawing.Size(397, 283); 
    this.ControlBox = false; 
    this.Controls.Add(this.label2); 
    this.Controls.Add(this.progressBar1); 
    this.Controls.Add(this.label1); 
    this.ForeColor = System.Drawing.SystemColors.ControlLightLight; 
    this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; 
    this.Name = "Splash"; 
    this.ShowIcon = false; 
    this.ShowInTaskbar = false; 
    this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; 
    this.ResumeLayout(false); 
    this.PerformLayout(); 
    

    फिर आपके आवेदन में

    sp = new Splash(); 
    sp.ShowDialog(); 
    
    1

    अन्य उत्तरों यहां इस अच्छी तरह से कवर करते हैं, लेकिन यह जानने योग्य है कि विजुअल स्टूडियो में स्प्लैश स्क्रीन के लिए कार्यक्षमता में बनाया गया है: यदि आप विंडोज़ फॉर्म ऐप के लिए प्रोजेक्ट गुण खोलते हैं और एप्लिकेशन टैब देखते हैं, तो वहां नीचे एक "स्पलैश स्क्रीन:" विकल्प है। आप बस अपने ऐप में कौन सा फॉर्म चुनते हैं जिसे आप स्प्लैश स्क्रीन के रूप में प्रदर्शित करना चाहते हैं और यह ऐप शुरू होने पर इसे दिखाने का ख्याल रखेगा और आपका मुख्य फॉर्म प्रदर्शित होने के बाद इसे छुपाएगा।

    तुम अब भी रूप में ऊपर

    +0

    बंद हो जाएगा यह आदर्श लगता है, लेकिन मुझे यह विकल्प नहीं दिख रहा है (वीएस 2013 में)। केवल ऑनलाइन संदर्भ जो मैं पा सकते हैं केवल विजुअल बेसिक के लिए हैं, तो शायद यह केवल इसके लिए समर्थित है? – Giles

    +1

    हाय @ गिल्स, यह मामला अच्छी तरह से हो सकता है, मैंने इसे केवल वीबी ऐप्स – tomRedox

    2

    वहाँ CodeProject पर अधिक A Pretty Good Splash Screen है (सही सीमाओं, स्थिति, आकार आदि के साथ) में वर्णित अपने फार्म को सेट करना होगा।

    यह

  • लेखक हाल ही में शुरू हो गया है को खारिज करने और करने के लिए स्थिति लेबल

  • फीका आउट
  • डबल क्लिक करें
  • प्रगति बार में

    • फीका के साथ आता है कोड अपडेट किया गया। यह वास्तव में काम का एक टुकड़ा है, और अच्छे विचारों के साथ कई अलग-अलग डेवलपर्स के बीच एक सहयोग है।

  • 10

    टेलीरिक से नीचे का नमूना एक आकार का आकार नियंत्रण का उपयोग करता है हालांकि इसे सामान्य विंडोज़ रूप में बदल देता है। यह अब तक का सबसे आसान और सबसे अच्छा तरीका है।

    http://www.telerik.com/support/kb/winforms/forms-and-dialogs/details/add-splashscreen-to-your-application

    +1

    पर उपयोग किया है, यह नमूना कोड के साथ स्वीकार्य उत्तर से वास्तव में अधिक जानकारीपूर्ण है, हालांकि यह एक लिंक-केवल उत्तर है। – Kaitlyn

    +0

    समस्या यहां है जब फॉर्म खोला जाता है, यह अन्य सभी खिड़कियों के पीछे खोला जाता है और मुझे लगता है कि इसे सामने कैसे लाया जाए। कुछ भी काम नहीं करता है। कोई सुझाव? – JSON

    +0

    मैंने इसे समझ लिया। यदि किसी और के पास एक ही समस्या हो रही है तो इन दो पंक्तियों को अपने मुख्यफॉर्म_लोड विधि ((फॉर्म 1) प्रेषक के अंत में जोड़ें) .TopMost = true; ((फॉर्म 1) प्रेषक) .BringToFront(); – JSON

    4

    सरल और आसान समाधान स्प्लैश स्क्रीन बनाने के लिए

    1. खुला नया रूप उपयोग नाम "स्पलैश"
    2. परिवर्तन पृष्ठभूमि छवि जो चाहो
    3. चयन प्रगति बार
    4. का चयन टाइमर

    टाइमर में अब सेट टाइमर टिक:

    private void timer1_Tick(object sender, EventArgs e) 
    { 
        progressBar1.Increment(1); 
        if (progressBar1.Value == 100) timer1.Stop();   
    } 
    

    नए रूप उपयोग नाम "फार्म -1" और फार्म 1 में आदेश के बाद उपयोग में जोड़ें।

    ध्यान दें: स्पलैश प्रपत्र अपने Form1 खोलने से पहले काम करता है

    1. इस पुस्तकालय

      using System.Threading; 
      
    2. समारोह नीचे की तरह

      public void splash() 
      {  
          Application.Run(new splash()); 
      } 
      
    3. उपयोग निम्न आदेश जोड़ने बनाने के प्रारंभ में।

      public partial class login : Form 
      {  
          public login() 
          { 
           Thread t = new Thread(new ThreadStart(splash)); 
           t.Start(); 
           Thread.Sleep(15625); 
      
           InitializeComponent(); 
      
           enter code here 
      
           t.Abort(); 
          } 
      } 
      

    http://solutions.musanitech.com/c-create-splash-screen/

    +1

    यह मुझे मिला सबसे सरल और सबसे अच्छा उदाहरण है। पूरी तरह से काम किया। –

    +0

    @ टाइटलरडेन, * सरल * और * सर्वश्रेष्ठ *? इसके बजाय [यह एक] देखें (http://stackoverflow.com/a/15836105/1997232) (और मैं सावधानी से इसे * पर्याप्त * खुद को कॉल करूंगा)। – Sinatr

    +0

    धन्यवाद @ सिनाटर, मैं शायद अगली बार उस कार्यान्वयन का उपयोग करूंगा, यह अधिक लचीला दिखता है। यह समाधान तब आसान था जब मैं सी # उठा रहा था, मैं मूल रूप से एक साधारण समाधान की तलाश में था, जिसके लिए प्रतिनिधियों और बहुत अधिक थ्रेडिंग की आवश्यकता नहीं थी। मैंने यह भी सीखा है कि _best समाधान_ बदलता है जब आप नई विधियां सीखते हैं;) –

    0

    एक अच्छा छप का कोई वास्तविक उदाहरण है क्योंकि वहाँ अब तक इस कोड

    public partial class ssplashscreen : Form 
        { 
         public ssplashscreen() 
         {     
          InitializeComponent();  
         } 
    
         private void timer1_Tick(object sender, EventArgs e) 
         { 
          progressBar1.Increment(1); 
          if (progressBar1.Value == 100) 
          { 
           timer1.Stop(); 
           this.Hide(); 
           Form frm = new login(); 
           frm.Show(); 
          } 
         } 
        } 
    
    +1

    साझा करने के लिए धन्यवाद यह उत्तर कुछ स्पष्टीकरण का उपयोग कर सकता है। – Raidri

    संबंधित मुद्दे