2010-06-02 7 views
5

मेरे पास एक सी # विंडोज़ फॉर्म है। जिस तरह से मैंने वर्तमान में इसे स्थापित किया है, जब Form1_Load() इसे पुनर्प्राप्त सहेजे गए डेटा के लिए चेक करता है और यदि उसे कुछ मिलता है तो यह उपयोगकर्ता को संकेत देता है कि वह उस डेटा को खोलना चाहता है। जब प्रोग्राम चलता है तो यह ठीक काम करता है लेकिन संदेश बॉक्स तुरंत दिखाया जाता है और मुख्य प्रोग्राम फॉर्म (फॉर्म 1) तब तक प्रदर्शित नहीं होता जब तक कि उपयोगकर्ता हाँ या नहीं क्लिक करता। मैं फॉर्म 1 को पहले पॉप अप करना चाहता हूं और फिर संदेश बॉक्स प्रॉम्प्ट करना चाहता हूं।फॉर्म लोड के बाद विधि को सही तरीके से कॉल करने का सबसे अच्छा तरीका क्या है?

अब मेरे फॉर्म में टाइमर बनाने से पहले इस समस्या को हल करने के लिए, फॉर्म 1_लोड() विधि में टाइमर शुरू किया, और फिर पहले टाइमर टिक ईवेंट में चेक और उपयोगकर्ता प्रॉम्प्ट निष्पादित किया। यह तकनीक समस्या हल करती है लेकिन ऐसा लगता है कि एक बेहतर तरीका हो सकता है।

क्या आपके पास कोई बेहतर विचार है?

संपादित करें: मुझे लगता है कि मैंने कुछ ऐसा करने के लिए पृष्ठभूमि कार्यकर्ता का भी उपयोग किया है। यह प्रपत्र थ्रेड पर वापस जाने के लिए विधि का आह्वान करने की सभी परेशानी से गुज़रने के लिए थोड़े मूर्खतापूर्ण लगता है और यह सब कुछ सिर्फ मिलीसेकंड में देरी करने के लिए बकवास करता है!

+0

टैग अनुचित हैं। आपको "सी #" "विनफॉर्म" चुनना चाहिए। टैग का मतलब प्रश्न की श्रेणी होना चाहिए। – Andrey

+0

हाँ मुझे यकीन नहीं था कि क्या उपयोग करना है। मैंने इसे अभी तय किया है। धन्यवाद। – PICyourBrain

+1

भविष्य के संदर्भ के लिए, इस लिंक में एक फॉर्म दिखाते समय ईवेंट के क्रम की एक सूची होती है: http://msdn.microsoft.com/en-us/library/86faxx0d%28VS.80%29.aspx –

उत्तर

13

मैं का प्रयोग करेंगे Form1_Shown()

+1

शानदार। मुझे यह भी एहसास नहीं हुआ कि Form_Shown घटना मौजूद थी। मैं बता सकता हूं कि यह एक अच्छा दिन होगा! – PICyourBrain

+0

मुझे विश्वास नहीं है कि वह इस कार्यक्रम का सुझाव दे रहा है। मुझे लगता है कि वह ऑनशॉउन() विधि को ओवरराइड करने की ओर इशारा कर रहा है? – Ian

+0

घटनाक्रम या ओवरराइडिंग। घटनाक्रम, यदि आप व्यवहार नहीं बदल रहे हैं। ओवरराइडिंग, अगर आप हैं। प्रश्न के संदर्भ में, मैं ओवरराइड करूँगा। – AMissico

2
  • एक Windows.Forms.Timer का उपयोग करते हुए आप क्या चाहते करने के लिए एक अच्छा, स्थिर, अच्छी तरह से जाना जाता है, और आसानी से समझ में तकनीक है। मैं किसी अन्य टाइमर ऑब्जेक्ट्स से बचूंगा।

  • फॉर्म का Shown ईवेंट अच्छी तरह से काम करता है।

  • ओवरलोड/Show विधि ओवरराइड करें। (अधिक नियंत्रण के लिए मेरी पसंदीदा तकनीक।) इस विधि में, मैं जांच की आवश्यकता होगी। तैयार होने पर, मैं base.Show विधि को कॉल करूंगा, फिर संदेश बॉक्स, प्रॉम्प्ट, लॉगिंग, या जो भी हो, कोई अन्य प्रोसेसिंग करें।

+0

-1? हे, कोई उचित नहीं। मैं संपादन के बीच में था। "स्यूडो-सेव" करने के लिए कोई व्यक्ति "पोस्ट" नहीं कर सकता है? – AMissico

+2

यह देखते हुए कि ओपी ने स्पष्ट रूप से कहा है कि वह स्क्रीन पर फॉर्म दिखाए जाने के ठीक बाद कुछ करना चाहता है, आप फॉर्म से अधिक उपयुक्त * नहीं प्राप्त कर सकते हैं। दिखाया गया()। इसके लिए एक टाइमर बहुत गुंजाइश है: यदि समय सही नहीं है (और यह विभिन्न मशीनों पर बदल सकता है) तो संदेश किसी अन्य उपयोगकर्ता कार्रवाई के बीच में दिखाया जा सकता है। और यदि आप वैसे भी घटनाओं का उपयोग करने जा रहे हैं, तो दिखाए जाने के बजाय शो का उपयोग क्यों करें? – Klay

+0

मुझे नियंत्रण रखना पसंद है। दिखाया गया है के बाद। शो पहले है।शो मुझे एक अलग रूप, संदेश, संकेत, या जो कुछ भी दिखाने की क्षमता देता है। दिखाया गया बहुत देर हो चुकी है। लोड बहुत जल्दी है। – AMissico

5

Shown घटना का प्रयोग करें। ऐसा लगता है कि आपको क्या चाहिए, और केवल फॉर्म दिखाए जाने पर पहली बार प्रदर्शित होगा।

Form f1 = new Form(); 
f1.Shown += new EventHandler(f1_Shown); 

public void f1_Shown(object sender, EventArgs e) 
{ 
    // Show dialog in here 
} 
+0

यह वास्तव में सुविधाजनक है! – Kryptic

+0

साझा करने के लिए धन्यवाद, मैं आपके समाधान का उपयोग करने की कोशिश कर रहा हूं जैसे कि जीयूआई ऊपर है लेकिन यह नियंत्रक को प्रस्तुत नहीं करता है जब तक कि यह दिखाए गए ईवेंट पर कार्य पूरा नहीं कर लेता है। मेरे लिए कोई सलाह? –

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

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