2011-05-19 17 views
6

मेरे पास एक सी # WinForms प्रोजेक्ट है जो इसकी कार्यक्षमता में बहुत विज़ार्ड है। अलग-अलग चरण स्टेपपैनल नामक कक्षा पर रहते हैं, जो पैनल नियंत्रण से प्राप्त होता है, फॉर्म के भीतर और उन पैनलों को एक सरणी में व्यवस्थित किया जाता है।नियंत्रण कब होता है। दृश्य = सत्य गलत साबित होता है?

जो मैंने चलाया है वह यह है कि जब UpdateUI() को कॉल किया जाता है और सरणी चलता है, तो वर्तमान चरण के लिए विज़ार्ड चरण शीर्षक टेक्स्ट समायोजित करता है, यह सुनिश्चित करता है कि सभी निष्क्रिय चरण छिपे हुए हैं, और यह सुनिश्चित करता है कि सक्रिय कदम सही जगह पर दिखाई देता है, और सही आकार है।

private void UpdateUI() 
    { 
     // If the StepIndex equals the array length, that's our cue 
     // to exit. 
     if (StepIndex == Steps.Length) 
     { 
      Application.Exit(); 
      return; 
     } 

     for (var xx = 0; xx < Steps.Length; xx++) 
     { 
      if (xx == StepIndex) 
      { 
       if (!String.IsNullOrEmpty(Steps[xx].Title)) 
       { 
        LabelStepTitle.ForeColor = SystemColors.ControlText; 
        LabelStepTitle.Text = Steps[xx].Title; 
       } 
       else 
       { 
        LabelStepTitle.ForeColor = Color.Red; 
        LabelStepTitle.Text = 
         Resources.UiWarning_StepTitleNotSet; 
       } 
      } 
      else 
      { 
       Steps[xx].Visible = false; 
      } 
     } 

     Steps[StepIndex].Top = 50; 
     Steps[StepIndex].Left = 168; 
     Steps[StepIndex].Width = 414; 
     Steps[StepIndex].Height = 281; 
     Steps[StepIndex].Visible = true; 

     SetNavigationButtonState(true); 
    } 

जब सब कुछ कहा और किया जाता है, कदम [StepIndex] .Visible == झूठी:

कोड यह रहा।

मैं अभी भी इस व्यवहार से परेशान हूं क्योंकि मैं 30 मिनट से भी कम समय से काम कर रहा था।

+0

क्या आपने पिछले 30 मिनट में कुछ भी बदल दिया है? – Beth

+0

हां, फिलहाल यह सक्रिय विकास में है। – amber

+0

विधि 'SetNavigationButtonState' विधि क्या करती है? –

उत्तर

16

यदि आप माता-पिता/कंटेनर नियंत्रण को Visible = false पर सेट करते हैं तो Visible = true पर किसी भी बच्चे के नियंत्रण को सेट करने से अब तक कोई प्रभाव नहीं पड़ेगा। Visible बाल नियंत्रण की संपत्ति अभी भी false होगी।

मुझे नहीं पता कि यह इस मामले में क्या होता है क्योंकि मुझे नियंत्रण की संरचना नहीं पता है, लेकिन यह एक संभावित परिदृश्य प्रतीत होता है।

इसे हल करने के लिए आपको पहले माता-पिता/contianer नियंत्रण को Visible = true और फिर बाल नियंत्रण (ओं) पर सेट करने की आवश्यकता है।

+0

को तोड़ दिया ऐसा लगता है कि स्टेपपैनेल दूसरे का बच्चा बन गया StepPanel जो छुपा था। – amber

+3

अच्छा है कि आपने इसे हल किया है। मेरी आखिरी टिप्पणी वास्तव में सच नहीं है। आप अभिभावक के सामने बच्चे को दृश्यमान संपत्ति को सही पर सेट कर सकते हैं। संपत्ति झूठी रहेगी, लेकिन जब आप मूल संपत्ति को सही पर सेट करेंगे। नेट "जादूगर" को बाल नियंत्रण की स्थिति याद रखेगा और तदनुसार सेट करेगा। –

+0

मुझे लगता है कि यह सब हुआ क्योंकि मैं स्टेपपैनल्स को लाइन करने की कोशिश कर रहा था, एक दूसरे के शीर्ष पर, और डिजाइनर सहायक होने की कोशिश कर रहा था। मैंने कोड जोड़ा है कि यदि StepPanel के माता-पिता इसे हटाने के लिए फ़ॉर्म नहीं हैं और फिर इसे फ़ॉर्म के नियंत्रण संग्रह में जोड़ें। – amber

0

if (xx == StepIndex)

ही सच्चा होने जा रहा है और पाश के अंत जब तक मैं कुछ याद आ रही है।

+0

चूंकि हम नहीं जानते कि स्टेप इंडेक्स कहां सेट है, आप उस धारणा को नहीं बना सकते हैं। –

+0

स्टेपइंडेक्स ट्रैक करता है कि उपयोगकर्ता किस कदम पर है और यह सरणी में StepPanel से संबंधित है। – amber

+0

@ सनी हत्तुनेन आप सही हैं मैं शीर्ष पर कोड को गलत तरीके से पढ़ता हूं। – Bit

0

कई संभावनाएं हैं। जब आप लाइन पर डीबगर संलग्न करते हैं:

SetNavigationButtonState(true); 

Steps[StepIndex].Visible == true करता है? यदि ऐसा है, तो सुनिश्चित करें कि StepIndex वास्तव में आपके द्वारा अपेक्षित इंडेक्स है (1 से बंद नहीं है, और "पिछले" चरण को प्रतिबिंबित नहीं करता है)। यदि आप सत्यापित करते हैं कि सही चरण सत्य पर सेट है, तो आपको इसे कहीं और अपडेट करना होगा।

यदि Steps[StepIndex].Visible == false सही होने के ठीक बाद, तो या तो दृश्यमान संपत्ति पर गेटर कुछ गणना के आधार पर लौट रहा है या एक घटना ट्रिगर हुई है जो इसे वापस झूठ में बदल रही है।

एचटीएच।

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