2010-05-04 10 views
15

मेरे पास tablelayoutpanel है। 2x2 - 2 कॉलम 2 पंक्तियां।पंक्ति/कॉलम अवधि प्रोग्रामेटिक रूप से बदलें (tablelayoutpanel)

उदाहरण के लिए, मैंने 1 पंक्ति, दूसरा कॉलम में बटन 1 बटन जोड़ा। बटन 1 में एक डॉक संपत्ति भरने के लिए सेट है। वीएस डिजाइनर बटन 1 के कॉलम/पंक्ति अवधि गुण सेट करने की अनुमति देता है।

मैं एक उपलब्धता Button1प्रोग्राम के की पंक्ति अवधि संपत्ति को बदलना चाहते हैं, तो यह इसे वापस स्थापित करने के लिए सभी दूसरे स्तंभ (1 पंक्ति और दूसरी पंक्ति) और उपलब्धता भर सकते हैं।

कैसे?

उत्तर

25

इस कोड के बारे में क्या?

private void button1_Click(object sender, EventArgs e) 
{ 
    var control = sender as Control; 

    if(control == null) 
     return; 

    if (1 == tableLayoutPanel1.GetRowSpan(control)) 
    { 
     tableLayoutPanel1.SetRowSpan(control, 2); 
    } 
    else 
    { 
     tableLayoutPanel1.SetRowSpan(control, 1); 
    } 
} 
+1

महान कोड। विजुअल स्टूडियो डिजाइनर ने मुझे गुमराह किया। मैं बटन 1 गुणों में देख रहा था, बटन 1 को टूलस्टिपैनेल आइटम पर डालने की कोशिश कर रहा था और इसलिए ... धन्यवाद! –

+0

यदि आपने विज़ुअल डिज़ाइनर के बजाय Form.Designer.cs में देखा था तो आपको सीधे समाधान मिला था। ;-) – Oliver

+1

मुझे पता है कि यह एक पुरानी पोस्ट है, लेकिन मैं यह इंगित करना चाहता हूं कि आपको सी # में "योडा स्थितियां" करने की आवश्यकता नहीं है क्योंकि अगर कथन दृढ़ता से टाइप किए जाते हैं। (और मेरा मानना ​​है कि यदि आप बूलियन के साथ गलती करते हैं और तुलना के बजाय असाइनमेंट करते हैं, तो यह किसी अन्य प्रकार के साथ उत्पन्न त्रुटि के विपरीत एक कंपाइलर चेतावनी उत्पन्न करता है।) – MiffTheFox

2

जबकि मुझे वर्तमान अप-वोटित उत्तर काफी पर्याप्त लगता है, यह भी आवश्यकता से थोड़ा गड़बड़ दिखाई देता है। अपनी संपत्तियों को सेट करने से पहले आपको tableLayoutPanel में नियंत्रण जोड़ना होगा।

विजुअल स्टूडियो (2013 और संभावित अन्य संस्करण) इन गुणों को नियंत्रण के हिस्से के रूप में दिखाएंगे। जब हकीकत में, वे टेबल LayoutPanel का हिस्सा हैं।

स्पष्टीकरण:

tableLayoutPanel.Controls.Add(**control**, x, y) 
tableLayoutPanel.SetColumnSpan(**control**, '# of cols to span') 

उदाहरण:

tableLayoutPanel1.Controls.Add(**button1**, 0, 0); 
tableLayoutPanel1.SetColumnSpan(**button1**, 2); 
tableLayoutPanel1.SetRowSpan(**button1**, 3); 

परिणाम: एक बटन जो इस अंतरिक्ष 'पर है'। (परंतु यह काफी बड़े क्षेत्र को कवर करने के लिए है। यहां तक ​​कि अगर यह नहीं 'कवर' अंतरिक्ष, यह होगा अभी भी 'आरक्षित' होता है।)

O O X X X 
O O X X X 
O O X X X 
X X X X X 
X X X X X 

अवधि होगा ग्रिड के आकार से भी बड़ा करना। : ग्रिड आकार को नहीं बदला। ग्रिड के आकार की संख्या को फसल/संपादित नहीं करें। संकलन में कोई त्रुटि नहीं फेंक दें।

यह कार्य करेगा/प्रदर्शन करेगा जैसे कि अवधि वर्तमान ग्रिड (tableLayoutPanel) अधिकतम आकार पर सेट की गई थी। यह केवल तभी प्रासंगिक है जब टीएलपी/ग्रिड आकार बदलता है।

यदि आप प्रोग्रामिंग के दो ग्रिड स्थान दो नियंत्रण जोड़ते हैं, तो ग्रिड में पहला नियंत्रण अपना स्थान रखता है। बाद में जोड़ा गया नियंत्रण अगले सेल ब्लॉक पर धक्का दिया जाता है। यदि 'स्पैन' जोड़ा जाता है, तो यह उस सेल ब्लॉक का उपयोग किया जाएगा और एक अप्रयुक्त सेल ब्लॉक की खोज जारी रखेगा।

पूर्व: label1, Label2 और Label3 0,0 करने के लिए जोड़ रहे हैं।

  • label1 0,0
  • Label2 में दिखाई देगा: 0,1
  • Label3: 0,2

पूर्व 2: लेबल 1 एक पंक्ति अवधि है 2.

  • label1: 0,0
  • Label2: 0,3

के बाद आप सही ग्रिड बिंदु और फैला चयन किया है, आप कर सकते हैं तो आगे: 0,2

  • Label3 जगह बदली डॉक और एंकर गुणों का उपयोग करके अपने लेआउट को अनुकूलित करें।

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