2013-08-06 9 views
6

जनरल समस्याSplitContainer पैनल आकार मुद्दा

आवेदन सी ​​# WinForms नेट 4.0 है।

मेरे पास SplitContainer है जो अधिकांश रूप लेता है, यह सभी दिशाओं में एंकर पर सेट होता है, इसलिए यह फ़ॉर्म के साथ फिर से आकार देता है। बाएं पैनल (पैनल 1) में एक साधारण मेनू है, यहां कोई समस्या नहीं है। दायां पैनल (पैनल 2) अधिक जटिल है और इसमें कई घोंसले वाले टैब नियंत्रण हैं (बहुत सारे नियंत्रण के साथ) - यह दर्दनाक जटिल है, लेकिन यह नहीं बदल रहा है।

समस्या यह है कि फ़ॉर्म का पुन: आकार इतना अच्छा काम नहीं करता है। वास्तव में, यदि आप धीरे-धीरे किनारों को खींचकर आकार बदलते हैं तो यह ठीक काम करता है, लेकिन जल्दी से खींचें या "पुनर्स्थापित करें" बटन (फॉर्म के शीर्ष-दाएं) का उपयोग करें, फिर समस्या उत्पन्न होती है।


मेरे नियंत्रण पदानुक्रम

निम्नलिखित मेरे नियंत्रण पदानुक्रम, इसके निश्चित रूप से एक में कटौती संस्करण का एक सरल उदाहरण है, लेकिन नेस्टेड टैब नियंत्रण जो प्रतिकृति के साथ मदद मिल सकती है पर प्रकाश डाला है:

  • फॉर्म
    • विभाजन कंटेनर (एंकर: ऊपर, बाएं, नीचे, दाएं)
      • अनुसूचित जाति Panel1 (न्यूनतम चौड़ाई: 300)
        • TreeViewControl (भूल जाते हैं कि यह क्या कहा जाता है)
      • अनुसूचित जाति Panel2
        • पैनल (लंगर: ऊपर, छोड़ दिया, नीचे, दाएं)
          • टैब कंट्रोल (एंकर: टॉप, बाएं, नीचे, दाएं)
            • टैब नियंत्रण w/स्क्रीन पर बहने वाले बहुत सारे पृष्ठ और नेविगेशन बटन को दिखाने के लिए आवश्यक है पी दाएँ कोने (लंगर: ऊपर, छोड़ दिया, नीचे, दाएं)

डीबग विवरण

कुछ डिबगिंग के बाद यह ऐसा लगता है कि यह वास्तव मेंहै(विभाजित कंटेनर का एक बच्चा) जो ठीक से आकार बदलता नहीं है, और वास्तविक SplitContainer स्वयं ठीक का आकार बदलता है।

यहाँ आकार बदलने से पहले, डिबग मूल्यों है कि इस दिखाने ...

पूर्ण चौड़ाई रूप होते हैं:

splitContainerMain.Width: 1479 
splitContainerMain.Panel2.Width: 1206 
panelCenter.Width: 1203 
tabControlMain.Width: 1215 

की उम्मीद सभी के रूप में, splitContainerMain.Panel2.WidthsplitContainerMain.Width से छोटा है।

आकार बदलने के बाद जहां भी समस्या:

splitContainerMain.Width: 815 
splitContainerMain.Panel2.Width: 1206 
panelCenter.Width: 1203 
tabControlMain.Width: 1215 

के रूप में देखा जा सकता है, splitContainerMain.Width के रूप में वांछित आकार दिया गया है, लेकिन splitContainerMain.Panel2.Width और बाद में अपने बच्चों को नहीं है।

नोट: कृपया याद रखें, अगर मैं मैन्युअल रूप से धीरे-धीरे फॉर्म का आकार बदलता हूं तो चौड़ाई अपडेट सही है - यह मेरे साथ कोई समस्या नहीं है जो सही ढंग से किसी एंकर को सेट नहीं कर रहा है।


मेरे प्रयास अब तक

मैं अगर इस मुद्दे को related to this problem here है सोच रहा हूँ, लेकिन मैं एक नया "MySplitContainer" कोशिश करते हैं और इस समस्या को हल करने के लिए बनाने के लिए तैयार नहीं हूँ।

जो मैंने करने की कोशिश की है वह विभिन्न फॉर्म आकार बदलने की घटनाओं का उपयोग करती है और चौड़ाई को मैन्युअल रूप से सेट करने का प्रयास करती है, लेकिन इसका कोई फायदा नहीं होता है। मुझे लगता है कि मैं कोशिश करना चाहता हूं कि Panel2.Width मूल्य को किसी प्रकार की घटना के भीतर से सेट करना है।


व्हाट आई

  • खोज रहे हैं रहा हूँ वहाँ वैसे भी सही ढंग से आकार बदलने के लिए जब splitContainerMain आकार परिवर्तन splitContainerMain.Panel2.Width मजबूर करने के लिए?
  • वैकल्पिक रूप से, मैं गणना कैसे कर सकता हूं कि Panel2.Width क्या होना चाहिए? और मैं Form.Resize ईवेंट से उस मान को कैसे सेट कर सकता हूं? (या कोई अन्य घटना?)
+0

मैं एक साथ परीक्षण करने के लिए एक फार्म डालने की कोशिश की है, लेकिन जैसा कि आपने वर्णन किया है, मैंने अभी तक खराब व्यवहार नहीं देखा है। यदि आप कुछ और लेआउट विवरण प्रदान कर सकते हैं, तो इससे मदद मिलेगी। लेकिन अन्यथा, मुझे आपके परिणामों को पुन: पेश करने में बहुत भाग्य नहीं है। – DonBoitnott

+0

@ डॉनबॉटनॉट: मैंने अपने लेआउट के बारे में कुछ विवरण जोड़े हैं, मुझे पता है कि यह दोहराना आसान नहीं होगा लेकिन शायद यह कुछ करेगा। मैं देखूंगा कि क्या मैं एक नए Winforms ऐप में भी दोहराना कर सकता हूं – musefan

+0

'पैनल केंद्र' क्या है? और आप कैसे आकार बदल रहे हैं ... कोड में? ... बस फॉर्म एज खींच रहा है? – DonBoitnott

उत्तर

0

जो कुछ मैं देखता हूं उसे आपको नियंत्रण के लिए किसी को भी एंकर सेट नहीं करना चाहिए जो स्प्लिटकेंटेनर पैनेल सहित समस्या पैदा कर रहा है।

इसके अलावा मैं स्प्लिटकंटर्स का सबसे अच्छा उपयोग करने के लिए डॉक फिल प्रॉपर्टी का उपयोग करने का सुझाव दूंगा।

यदि आगे की मदद की ज़रूरत है तो कृपया डिजाइनर फ़ाइल प्रदान करें ताकि बेहतर दिख सके।

-2

वास्तव में एक ही समस्या, नीचे दिए गए कोड मेरे लिए काम किया: एक पैनल "tableBorder"

tableBorder

Dock = DockStyle.Fill; 

पर विभाजन कंटेनर पर, (में

  1. चारों ओर splitContainer नहीं एंकरिंग)

    Dock = DockStyle.None; 
    
    1. tableBorder SizeChanged घटना पर

      private void tableBorder_SizeChanged(object sender, EventArgs e) 
      { 
          new Thread(() => { resizeMe(); }).Start(); 
      } 
      
      private void resizeMe() 
      { 
          Thread.Sleep(100); 
      
          this.BeginInvoke((Action)(() => { 
      
           doIt(); 
      
          })); 
      } 
      
      private void doIt() 
      { 
          splitContainer.Height = tableBorder.Height; 
          splitContainer.Width = tableBorder.Width; 
      } 
      

    वहाँ एक छोटा सा अंतराल है, लेकिन काम करता है

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