2010-09-22 10 views
8

मैं स्टार्टअप पर मेरे ऐप की मुख्य विंडो को छिपाने के लिए चाहता था, इसलिए मैं निर्माता में रखते:स्टार्टअप पर छिपाने के फॉर्म: यह क्यों नहीं है। (मेरा) छुपाएं?

this.Hide(); 

यह हालांकि मेरे रूप को छिपाने के नहीं है। ऐसा लगता है कि मैं केवल फॉर्म को छिपाने के लिए बटन प्राप्त कर सकता हूं। क्या मुझसे यहां कुछ गलत हो रहा है?

+0

संभव डुप्लिकेट [this.Visible विण्डोज़ फॉर्म्स में काम नहीं कर रहा] (http कर सकते हैं: // stackoverflow। कॉम/प्रश्न/374270 9/यह-दृश्य-काम नहीं कर रहा है-विंडोज़ फॉर्म) –

उत्तर

20

आप कोड की इस पंक्ति का उपयोग कर सकते हैं। यह अभ्यस्त इसे छिपाने, लेकिन यह छोटा कर दिया जाएगा:

this.WindowState = FormWindowState.Minimized; 

अलावा, अगर आप इसे या तो कार्य पट्टी पर नहीं दिखाना चाहते हैं, तो आप इस लाइन जोड़ सकते हैं:

this.ShowInTaskbar = false; 

लेकिन क्यों क्या आप फॉर्म बनाते हैं यदि आप इसे पहले स्थान पर दिखाना नहीं चाहते हैं?

+0

क्योंकि यह विंडोज के साथ शुरू होगा और सिस्टम ट्रे में एंटीवायरस और फ़ायरवॉल सॉफ़्टवेयर के समान तरीके से रहता है। किसी भी विचार के रूप में क्यों 'यह। हाइड()' वास्तव में फॉर्म कन्स्ट्रक्टर से बुलाए जाने पर फ़ॉर्म को छुपा नहीं देता है? – Pieter

+1

मुझे लगता है कि ऐसा इसलिए है क्योंकि इस बिंदु पर (कन्स्ट्रक्टर चलाने पर) आपका फॉर्म अभी तक दिखाई नहीं दे रहा है। केवल कन्स्ट्रक्टर के बाद ही, फॉर्म बनाया जाएगा और दृश्यमान बनाया जाएगा। तो आपकी एकमात्र समस्या यह क्यों काम नहीं करती है क्योंकि यह कन्स्ट्रक्टर से किया जाता है। मैं इसे समाधान के रूप में नहीं सुझाता, लेकिन एक प्रयोग के रूप में, टाइमर बना देता हूं और इसे 1 सेकंड की देरी के साथ कन्स्ट्रक्टर से शुरू करता हूं, और टाइमर_टिक विधि फॉर्म को छुपाती है। यह काम करेगा, क्योंकि जब आप इसे कॉल करेंगे। छुपाएं() फॉर्म दिखाई देगा। –

+0

जब आप प्रोग्राम.cs में इस तरह का निर्माण करते हैं तो आपको वही समस्या मिलती है: Application.Run (नया फॉर्म 1()); और आप फॉर्म 1 के निर्माता में आवेदन लिखने का प्रयास करें। एक्सिट()। आवेदन के बाद। एक्सिट() कॉल करें आपका आवेदन अभी भी जिंदा और अच्छी तरह से होगा, और ऐसा इसलिए है क्योंकि कन्स्ट्रक्टर एप्लिकेशन से पहले चलाया जाता है। रुन, और इस तरह कोई प्रभाव नहीं पड़ेगा। आपके लिए भी यही समस्या है। आप इसे छिपाने के लिए, बस आवेदन करने के लिए बनाओ। इसे जीवंत बनाओ और फिर लात मारो। –

0

फ़ॉर्म के दृश्यमान प्रॉपर्टी को अपने आवेदन के मुख्य प्रवेश बिंदु में लोड होने से पहले गलत पर सेट करने का प्रयास करें।

Form1 obj = new Form1(); 
obj.visible = false; 
Application.Run(obj); 

या 9000 की तरह उच्चतर स्तर पर फार्म की समन्वय स्थापित करने की कोशिश, 9000

+0

यह कोई समाधान नहीं है। OnVisibleChanged के ओवरराइड का उपयोग करने की आवश्यकता है। ऊपर देखो। –

+0

फॉर्म ऑफस्क्रीन न रखें लेकिन अभी भी दिखाई दे रहा है। स्क्रीनreader सॉफ़्टवेयर का उपयोग कर अंधेरे उपयोगकर्ता अभी भी इसे "देखें" (जैसे उपयोगकर्ता Alt-Tab का उपयोग करेंगे)। –

11

बस OnVisibleChanged विधि ओवरराइड और वहाँ में फार्म की दृश्यता को बदलने, कुछ इस तरह:

protected override void OnVisibleChanged(EventArgs e) 
{ 
    base.OnVisibleChanged(e); 
    this.Visible = false; 
} 

और बस हो गया! सरल और साफ

+0

यह काम कर रहा समाधान है। फ़ॉर्म पर कॉल करें() फ़ंक्शन और कोड के ऊपर रखें। धन्यवाद :) –

+0

यह एकमात्र समाधान है जो मेरे लिए काम करता है। – tavlima

0

मैंने निर्माता को झूठ बोलने या छिपाने के लिए दृश्यमान और ऑनलोड ईवेंट में इसे करने की कोशिश की।

इनमें से कोई भी प्रभाव नहीं पड़ा, क्योंकि फॉर्म के निर्माण के बाद फ़ॉर्म को दृश्यमान पर सेट किया गया है और ऑनलोड ईवेंट को निकाल दिया गया है, SetVisibleCore में।

दिखाए गए कार्यक्रम कार्यों में छिपे हुए फॉर्म को सेट करना, लेकिन एक पल के लिए स्क्रीन पर फॉर्म फ़्लिकर सेट करना।

आप SetVisibleCore को ओवरराइड भी कर सकते हैं और मान को गलत पर सेट कर सकते हैं, लेकिन फिर ऑनलोड को निकाल दिया नहीं गया है और कुछ अन्य ईवेंट गड़बड़ हो गए हैं, जैसे फॉर्म क्लोजिंग।

मेरी राय में सबसे अच्छा समाधान फॉर्म को कम करने के लिए फॉर्म को सेट करना है और टास्कबार में नहीं दिखाया जाना चाहिए। Run()।

तो बजाय:

Application.Run(new MainForm()); 

कार्य करें:

MainForm form = new MainForm(); 
form.WindowState = FormWindowState.Minimized; 
form.ShowInTaskbar = false; 

Application.Run(form); 

फिर आवेदन सभी उचित घटनाओं के साथ चलेंगे (यहां तक ​​कि OnShown) निकाल दिया और प्रपत्र प्रदर्शित नहीं किया जाएगा।

यदि आप इसके बाद सामान्य रूप से फ़ॉर्म को छुपाने/दिखाने में सक्षम होना चाहते हैं, तो आपको विंडोस्टेट और शोइन टास्कबार को सामान्य और सत्य पर सेट करने की आवश्यकता है।

दिखाए गए ईवेंट में, आप ShownInTaskbar को वापस सत्य पर सेट कर सकते हैं और फिर फॉर्म को सही तरीके से छुपा सकते हैं।

this.Shown += new System.EventHandler(this.MainFormShown); 

...

void MainFormShown(object sender, EventArgs e) 
{ 
    this.ShowInTaskbar = true; 
    this.Visible = false; 
} 

सेटिंग WindowState वापस सामान्य करने के लिए, जबकि फार्म छिपा हुआ है कोई प्रभाव नहीं है, तो आप आप फिर से रूप को दिखाने के बाद यह करने के लिए की आवश्यकता होगी, अन्यथा आइकन होगा टास्कबार में रहें लेकिन फॉर्म कम हो जाएगा।

this.Show(); 
this.WindowState = FormWindowState.Normal; 
+0

कामकाजी समाधान ऊपर है। यह काम नहीं करेगा। –

+0

ऊपर काम कर रहे समाधान समाधान मेरे लिए काम नहीं किया था। इससे खिड़की छिपी जाने से पहले स्क्रीन पर झिलमिलाहट हो गई। इसके अलावा यह आपको बाद में फॉर्म दिखाने से रोकता है। इस विधि ने मेरे लिए ठीक काम किया है। –

3

आप बल्कि this.Hide का प्रयोग करेंगे या this.Show आप के इस

protected override void OnShown(EventArgs e) 
{ 
    base.OnShown(e); 
    this.Hide(); 
} 
संबंधित मुद्दे