2012-03-21 17 views
7

मैंने पढ़ा है कि Load ईवेंट विंडो हैंडल के निर्माण के बाद निकाल दिया जाना चाहिए, लेकिन से पहले विंडो वास्तव में दिखाई देगी। अधिकांश भाग के लिए, यह सच लगता है। हालांकि, मुझे पता चला है कि जब मैं WindowState संपत्ति FormWindowState.Maximized पर सेट करता हूं (या तो वीएस डिजाइनर के माध्यम से, या रचनात्मक रूप से कन्स्ट्रक्टर में), तो Load ईवेंट फायरिंग से पहले विंडो दिखाई देगी। उदाहरण के लिए:विंडोस्टेट को अधिकतम करने के लिए विंडो को बहुत जल्दी दिखाई देने के कारण

using System; 
using System.Windows.Forms; 

namespace MyApplication 
{ 
    public partial class MyForm : Form 
    { 
     public MyForm() 
     { 
      InitializeComponent(); 
      WindowState = FormWindowState.Maximized; 
     } 

     protected override void OnLoad(EventArgs e) 
     { 
      MessageBox.Show("OnLoad - notice that the window is already visible"); 
      base.OnLoad(e); 
     } 
    } 
} 

यह बदले में एक बहुत झिलमिलाहट, जबकि उसके नियंत्रण (जो Form.Load घटना के दौरान बाहर रखी हैं) आकार दिया जाता है, जबकि खिड़की से दिखाई देता है दिखाया गया प्रपत्र कारण बनता है। अगर मैंने राज्य को अधिकतम करने के लिए सेट नहीं किया है, तो खिड़की दिखाए जाने से पहले सभी आकार बदलना है (जो मुझे उम्मीद थी)।

मैं WindowState को Load ईवेंट के अंत तक सेट करने पर रोक सकता हूं, लेकिन यह अभी भी बहुत झटके का कारण बनता है क्योंकि खिड़की दिखाई देती है और फिर सभी नियंत्रण आकार बदलते हैं।

कोई विचार?

+3

कि 'लोड घटना में MessageBox.Show' दिखाने के लिए प्रपत्र बाध्य करेगा। – LarsTech

+1

'लोड' ईवेंट में नियंत्रण का आकार कुछ हद तक संदिग्ध है। आप नियंत्रण के लिए अंतर्निहित आकार बदलने वाले तंत्रों पर भरोसा क्यों नहीं करते हैं, जैसे कि 'डॉक' या' एंकर 'गुण या' टेबललेआउट पैनेल '? मैन्युअल रूप से बाद में विंडो का आकार बदलने पर आप नियंत्रणों का मैन्युअल रूप से आकार बदल देंगे? –

+0

मुझे यह भी मिल रहा है। मैं उपयोगकर्ता सत्रों के बीच विंडोस्टेट को सहेज रहा हूं ताकि फ़ॉर्म का आकार बदला जा सके, आदि जिसे उपयोगकर्ता ने पहले किया था और जब मैंने विंडोस्टेट को अधिकतम करने के लिए सेट किया था तो मुझे बहुत झटका लग रहा है, आदि। क्या इसे ठीक करने का कोई समाधान है? –

उत्तर

0

जो चीजें विंडो की उपस्थिति को बदलती हैं (उदाहरण के लिए आकार बदलती हैं) विंडो को दिखाई देने का कारण बनती है।

आप अपने ctor में .Hide() या .Visible = False फोन और यह दिखाई फिर .load के अंत में कर सकता है

+0

झूठ को दिखाना सेट करना कोई प्रभाव नहीं प्रतीत होता है। इस तथ्य के साथ ऐसा कुछ हो सकता है कि यह फ़ॉर्म एप्लिकेशन का मुख्य रूप है और एप्लिकेशन.रुन – user1283610

1

आप लोड घटना उपयोग System.Diagnostics.Debug.WriteLine में कुछ नैदानिक ​​संदेश डाल करने के लिए की जरूरत है() ;
यदि आप संदेशबॉक्स का उपयोग करते हैं, तो आप घटनाओं के सामान्य प्रवाह क्रम को नष्ट कर देंगे।

protected override void OnLoad(EventArgs e)   
{    
    System.Diagnostics.Debug.WriteLine("onLoad");    
    base.OnLoad(e);   
} 

This post पहले सक्रिय घटना फायरिंग तक WindowState के परिवर्तन में देरी करने के अधिक जानकारी के समझाने

2

प्रयास करें। यह VS.NET में VS2005 और फ्रेमवर्क 2.0 के साथ मेरे लिए काम करता है।

+0

के माध्यम से प्रदर्शित किया गया है। यह मेरे लिए काम करता था जब विंडोस्टेट को अधिकतम से सामान्य में बदला जा रहा था। इसके बजाय मैंने इसे विंडो लोड इवेंट में अधिकतम करने के लिए सेट किया है। – NielW

1

इससे पहले कि आप InitializeComponent() WindowState सेट करने के लिए:

public Form() //Constructor 
    { 
     WindowState = FormWindowState.Maximized; 

     InitializeComponent(); 
    } 
संबंधित मुद्दे