2010-04-01 19 views
8

मैं TabControl में टैब को प्रोग्रामेटिक रूप से पुन: व्यवस्थित कैसे करूं? मुझे कुछ स्थितियों के आधार पर टैब को सॉर्ट करने की आवश्यकता है।प्रोग्राम क्रमिक रूप से टैब ऑर्डर

यदि डिजाइनर के माध्यम से पुनरावृत्ति करना संभव है, तो मुझे लगता है कि हम रनटाइम पर भी कोड के माध्यम से ऐसा करने में सक्षम होना चाहिए।

उत्तर

7

अपने टैब पेजों की अनुक्रमणिका को बदलने के लिए आपको अपने टैब पेज संग्रह को फिर से परिभाषित करना होगा।

+0

फिर से परिभाषित करें? क्या आप थोड़ा सा विस्तार कर सकते हैं ?? क्या ऐसा है कि मुझे उपलब्ध सभी टैब को हटाना होगा और फिर उन्हें क्रम में जोड़ना होगा? – Aneef

+0

आपने कुछ ऐसा देखा होगा: tabControl.Controls.Add (tabPage); आपको ControllCollection में टैब पृष्ठों का क्रम बदलना होगा (जैसे आप किसी अन्य संग्रह के साथ करेंगे)। – thelost

+0

अच्छी तरह से मैंने यह किया है, जैसा कि मैंने अपनी पिछली टिप्पणी पर कहा था, उन्हें हटा दें और जैसा चाहें पुन: व्यवस्थित करें, मैंने सोचा कि हम कुछ सॉर्टिंग या smt * sigh *: पी कर सकते हैं, वैसे भी – Aneef

9
  1. नया फॉर्म बनाएं।
  2. नया टैबकंट्रोल बनाएं।
  3. ध्यान दें कि इसमें दो टैबपेज नियंत्रण हैं, और टैबपेज 1 पहला टैब है।
  4. प्रपत्र का लोड घटना में,
    • this.TabControl1.TabPages.Remove(this.TabPage2)
    • this.TabControl1.TabPages.Insert(0, this.TabPage2)
  5. भागो विधि जोड़ें।
  6. नोटिस TabPage2 अब पहला टैब है।

ध्यान दें कि अगर आप टैब पेज को दूर करने में विफल, यह अभी भी अपने पुराने स्थान पर दिखाई देगा। दूसरे शब्दों में, आपके पास एक ही टैब पेज के दो टैब होंगे।

5

थॉस्ट सही है। नीचे एक त्वरित नमूना कोड है।

2 टैब (tabpage1, tabpag2)

तो मैं दो tabpages घोषित करने और उस में TabControl में मौजूदा टैब की दुकान के साथ एक टैब नियंत्रण है।

abPage tbp1 = new TabPage(); 
TabPage tbp2 = new TabPage(); 

tbp1 = tabControl1.TabPages[0]; 
tbp2 = tabControl1.TabPages[1]; 

फिर एक बटन पर मैं

tabControl1.TabPages.Remove(tabControl1.TabPages[0]); 

का उपयोग करके टैब हटा दिया अब अगर आप तब क्रम बदलने के लिए आप शीर्ष होगा इसी क्रम में टैब में शामिल चाहते हैं उसे क्लिक

//Order changed  
tabControl1.TabPages.Add(tbp2); 
tabControl1.TabPages.Add(tbp1); 

नोट: यह अवांछित त्वरित कोड है।

1

जाओ अंदर Designer.cs फ़ाइल

वहाँ आप

/// [Your TabControl Name] 
yourTabControl.Controls.Add(yourPage1); 
yourTabControl.Controls.Add(yourPage2); 
yourTabControl.Controls.Add(yourPage3); 

मिलेगा जोड़ने के क्रम TabControl में अपने tabpages 'आदेश है। ऑर्डर बदलें कि आप कैसे चाहते हैं। TabControl.Controls के कार्यों को निकालें और जोड़ें, आपको शोबैन के उत्तर देने में मदद मिलेगी।

+1

भेजा नहीं है टोबैक और BringToFront zorder positon को बदलना चाहिए? यानी यदि इस टैबपेज पर सीधे नियंत्रण है, और आपने टैब पेज पर टॉफ्रंट लाया है, तो आप उस टैबपृष्ठ को उस ऑब्जेक्ट को नहीं देख पाएंगे जो पहले इसके ऊपर था। ऐसा लगता है जैसे आप सुझाव दे रहे हैं कि ये फ़ंक्शंस टैब की स्थिति को फिर से ऑर्डर करें। – Chris

+0

@ क्रिस मैं कल इसे देखूंगा, आप सही हो सकते हैं। – icaptan

+0

@ क्रिस आप सही हैं, मैंने BringToFront का परीक्षण किया है। यह FlowLayoutPanel के लिए काम करता है, लेकिन TabControl के लिए नहीं। – icaptan

1

Initilizacomponent() के बाद इसे आज़माएं। यह कोड आपको .cs फ़ाइल में प्रोग्रामेटिक रूप से बदलने की स्वतंत्रता देगा।

 this.tabReceive.Controls.Remove(this.metroTabPage4); 
     this.tabReceive.Controls.Remove(this.metroTabPage5); 

     this.tabReceive.Controls.Add(this.metroTabPage4); 
     this.tabReceive.Controls.Add(this.metroTabPage5); 
3

कोड के निम्नलिखित लाइनों भी चाल करते हैं, समाधान इस तरह की भी छँटाई का कोई सीधा रास्ता है कि डेटा के अन्य प्रकार के लिए काम करता है सकते हैं: - एक सूची में कन्वर्ट - सूची सॉर्ट - इसे वापस रखें

public static void Sort(TabControl tabControl) 
{ 
    var tabList = tabControl.TabPages.Cast<TabPage>().ToList(); 
    tabList.Sort(new TabPageComparer()); 
    tabControl.TabPages.Clear(); 
    tabControl.TabPages.AddRange(tabList.ToArray()); 
} 

public class TabPageComparer : IComparer<TabPage> 
{ 
    public int Compare(TabPage x, TabPage y) 
    { 
     return string.Compare(x.Text, y.Text); 
    } 
} 
+0

क्या एक शानदार समाधान है। –

0

कभी-कभी मेरे पास कई टैबपृष्ठों के साथ टैबकंट्रोल होते हैं। रनटाइम टैबपेज पर अदृश्य (उन्हें हटाकर) एक बार बाद में जोड़ा जाता है।

इसके बाद टैबपृष्ठ गलत क्रम में हो सकते हैं। मैं इस कोड का दोबारा पुन: व्यवस्थित करने के लिए उपयोग करता हूं:

public void ReorderTabPages() 
{ 
    // Demo code to reorder tabControl with tabPages 
    // where some tabPages may be unwanted at the moment 

    // caution: events like "SelectedIndexChanged" does fire! 

    // List of wanted tab pages 
    List<TabPage> wantedTabPages = new List<TabPage>(); 

    // remember the current selected tab 
    TabPage currentTabPage = this.tabControl.SelectedTab; 

    // check if all possibly active tabs are currently visible 
    // check it in the order they should be displayed 
    // after that they are in the correct order in "wantedTabPages" 
    if (this.tabControl.TabPages.IndexOf(this.tabPage_01) >= 0) 
     wantedTabPages.Add(this.tabPage_01); 
    if (this.tabControl.TabPages.IndexOf(this.tabPage_02) >= 0) 
     wantedTabPages.Add(this.tabPage_02); 
    if (this.tabControl.TabPages.IndexOf(this.tabPage_03) >= 0) 
     wantedTabPages.Add(this.tabPage_03); 
    if (this.tabControl.TabPages.IndexOf(this.tabPage_04) >= 0) 
     wantedTabPages.Add(this.tabPage_04); 

    this.tabControl.SuspendLayout(); 

    // remove all currently visible tab pages 
    for (int i = this.tabControl.TabPages.Count - 1; i >= 0; i--) 
     this.tabControl.TabPages.RemoveAt(i); 

    // add the tabPages in the correct order 
    foreach (var wantedPage in wantedTabPages) 
     this.tabControl.TabPages.Add(wantedPage); 

    // restore the currently selected tabPage 
    this.tabControl.SelectedTab = currentTabPage; 

    this.tabControl.ResumeLayout(); 
} 
संबंधित मुद्दे