2010-02-02 8 views
5

मैं क्लाइंट क्षेत्र को 3 पंक्तियों में विभाजित करने के लिए एक TableLayoutPanel का उपयोग कर रहा हूं (केवल 1 कॉलम है)। शीर्ष और निचली पंक्तियां निश्चित ऊंचाई के लिए डिज़ाइन की गई हैं; उनमें एक शीर्षलेख और एक पाद लेख होगा जिसमें प्रारंभ में प्रत्येक में एक बाल लेबल नियंत्रण होता है जिसमें स्थैतिक पाठ होता है (केवल आरंभ करने के लिए)। शेष क्षेत्र को भरने के लिए मध्य पंक्ति को गतिशील रूप से आकार दिया जाना चाहिए। अंततः इस मध्य फलक में एक सूचीदृश्य होगा।TableLayoutPanel: सामग्री पंक्तियों को सही ढंग से आकार में नहीं मिल सकता

private void AddHeaderRow() 
    { 
     const int headerHeight = 30; 
     LayoutPanel.RowStyles.Add(new RowStyle(SizeType.Absolute, headerHeight)); 

     Label label = new Label(); 
     label.BackColor = Color.AliceBlue; 
     label.BorderStyle = BorderStyle.None; 
     label.ForeColor = Color.LightGray; 
     label.TextAlign = ContentAlignment.MiddleRight; 
     label.Text = "Header Banner"; 
     label.Dock = DockStyle.Fill; 
     float size = label.Font.SizeInPoints; 
     label.Font = new Font(label.Font.Name, size * 2); 

     const int column = 0, row = 0; 
     LayoutPanel.Controls.Add(label, column, row); 
    } 


    private void AddBodyRow() 
    { 
     LayoutPanel.RowStyles.Add(new RowStyle(SizeType.AutoSize)); 

     Label label = new Label(); 
     label.BorderStyle = BorderStyle.FixedSingle; 
     label.ForeColor = Color.LightGray; 
     label.TextAlign = ContentAlignment.MiddleCenter; 
     label.Text = "Content Under construction ..."; 
     label.Dock = DockStyle.Fill; 

     float size = label.Font.SizeInPoints; 
     label.Font = new Font(label.Font.Name, size * 2); 

     const int column = 0, row = 1; 
     LayoutPanel.Controls.Add(label, column, row); 
    } 


    private void AddFooterRoow() 
    { 
     const int footerHeight = 30; 
     LayoutPanel.RowStyles.Add(new RowStyle(SizeType.Absolute, footerHeight)); 

     Label label = new Label(); 
     label.BackColor = Color.AliceBlue; 
     label.BorderStyle = BorderStyle.None; 
     label.ForeColor = Color.LightGray; 
     label.TextAlign = ContentAlignment.MiddleRight; 
     label.Text = "Footer Banner"; 
     label.Dock = DockStyle.Fill; 

     float size = label.Font.SizeInPoints; 
     label.Font = new Font(label.Font.Name, size * 2); 

     const int column = 0, row = 2; 
     LayoutPanel.Controls.Add(label, column, row); 
    } 

:

public class ExplorerTableLayoutPanelManager 
{  
    public ExplorerTableLayoutPanelManager(ExplorerTableLayoutPanel panel) 
    { 
     LayoutPanel = panel; 
    } 

3 तरीकों कि तालिका लेआउट में 3 पंक्तियों में से प्रत्येक बनाने हैं: मैं एक प्रबंधक वर्ग है कि एक तर्क पैनल (ExplorerTableLayoutPanel) वस्तु प्रबंधित किया जा रहा के रूप में लगता है समस्या जो मैं देख रहा हूं वह यह है कि आखिरी पंक्ति निश्चित पंक्ति ऊंचाई ले रही है जिसे मैंने 30 के रूप में अनुरोध किया है। यह हिस्सा सही है। हालांकि, पहली और दूसरी पंक्तियां शेष जगह को उनके बीच समान रूप से विभाजित कर रही हैं जो कि मैं नहीं चाहता हूं। जैसा कि आप देख सकते हैं, मैंने पंक्तियों की ऊंचाई को पहली पंक्ति के लिए 30 पंक्तियों में स्पष्ट रूप से सेट किया है जैसा कि अंतिम पंक्ति के लिए किया गया है, लेकिन यह काम नहीं करता है। दूसरी पंक्ति (मध्य) में इसका RowStyle आकार आकारटाइप पर सेट है। ऑटोसाइज जिसे मैं शेष स्थान का उपयोग करने के लिए था, इसलिए आकार को स्पष्ट रूप से सेट न करें। मैं गलत हो सकता हूं लेकिन मुझे यकीन नहीं है।

+0

यह एक मेज के साथ आप का अनुकरण कर रहे हैं "डॉक" लेआउट संपत्ति तेजी। –

उत्तर

11

मैं अपने कोड का परीक्षण नहीं किया है, लेकिन एक ही नजर में:

private void AddBodyRow()  
{ 
    LayoutPanel.RowStyles.Add(new RowStyle(SizeType.AutoSize)); 
    ... 

जब से तुम शेष स्थान को भरने के हैं SizeType.AutoSize नहीं चाहते अन्यथा शरीर पंक्ति लेबल फिट करने के लिए हटना करने की कोशिश करेंगे , भले ही लेबल डॉक स्टाइल पर सेट हो। भरें। क्या आप चाहते हैं पंक्ति SizeType.Percent का उपयोग करके सभी जगह यह कर सकते हैं भरने बनाने के लिए है:

private void AddBodyRow()  
{ 
    LayoutPanel.RowStyles.Add(new RowStyle(SizeType.Percent, 100f)); 
    ... 
+2

आपकी प्रतिक्रिया के लिए धन्यवाद। मैंने इस विशेष मुद्दे के संबंध में अपने तरीकों की गलती सीखी है और अब यह महसूस किया है कि पूर्ण शैली वाले पंक्तियों के बाद 100% का मतलब शेष शेष स्थान भरना है। एक बार फिर धन्यवाद। – Zephilim

6

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

.RowStyles.Clear(); 

फिर नई शैली काम कर रहे हैं:

.RowStyles.Add(new RowStyle(SizeType.AutoSize)); 
संबंधित मुद्दे