2011-07-13 11 views
8

में TableLayoutPanel में झिलमिलाहट से बचने के लिए कैसे मैं उपस्थिति अंकन उद्देश्यों के लिए एक TableLayoutPanel का उपयोग कर रहा हूँ। मैंने इस TableLayoutPanel के अंदर नियंत्रण (एक पैनल और एक लेबल) जोड़ा है और उनके लिए घटनाएं बनाई हैं। कुछ स्थितियों में मैंने सभी नियंत्रणों को मंजूरी दे दी है और TableLayoutPanel की अलग-अलग स्थिति में समान नियंत्रणों को बांधने के लिए आगे बढ़े हैं। नियंत्रण को फिर से बाध्य करते समय, TableLayoutPanel झिलमिलाहट और प्रारंभ करने में बहुत धीमी है।सी # .net

उत्तर

13

लेआउट को तब तक निलंबित करें जब तक कि आपने अपने सभी नियंत्रण जोड़े नहीं हैं।

TableLayoutPanel panel = new TabelLayoutPanel(); 
panel.SuspendLayout(); 

// add controls 

panel.ResumeLayout(); 

डबल बफरिंग का उपयोग करने पर भी देखें। आपको TableLayoutPanel का उप-वर्ग बनाना होगा। उदाहरण here देखें।

+0

यह मददगार था, मैं अब काफी कम घबराना हो रही है। धन्यवाद। – Jmnstr

-1

ऊपर का सुधार के रूप में, मैं के साथ बेहतर परिणाम था:

TableLayoutPanel panel = new TabelLayoutPanel(); 
    panel.SuspendLayout(); 
    panel.StopPaint(); 

    // add controls 

    panel.ResumePaint(); 
    panel.ResumeLayout(); 
+8

'स्टॉपपेंट' और 'रेज़्यूमेन्ट' टेबललेआउट पैनेल नियंत्रण के मूल तरीके नहीं हैं। आप स्पष्ट रूप से एक एक्सटेंशन का उपयोग कर रहे हैं, जिसे आपने अपने उत्तर में शामिल नहीं किया था। – LarsTech

1

उपयोग संपत्ति dBuffer सच

public partial class MyTableLayoutPanel : TableLayoutPanel 
{ 
     public MyTableLayoutPanel() 
     { 
      InitializeComponent(); 
     } 

     public MyTableLayoutPanel(IContainer container) 
     { 
      container.Add(this); 
      InitializeComponent(); 
     } 

     /// <summary> 
     /// Double buffer 
     /// </summary> 
     [Description("Double buffer")] 
     [DefaultValue(true)] 
     public bool dBuffer 
     { 
      get { return this.DoubleBuffered; } 
      set { this.DoubleBuffered = value; } 
     } 
} 
+2

क्या आप वर्णन कर सकते हैं कि डीबीफर को सही क्यों सेट किया जाना चाहिए? –

0
स्थापित करने के लिए इस पैनल

एक और सवाल पर प्रस्तुत इस कोड को किसी न किसी यह है, यह TableLayoutPanel redraw सेट करने के लिए एक API कॉल का उपयोग करता है।

https://stackoverflow.com/a/10038782/197765

3

इस के लिए मुझे Remove flickering due to TableLayoutPanel & Panel in windows form

यहाँ है कि लिंक (शब्दशः नकल की) में है

पूरी तरह से कारण TableLayoutPanel को खिड़कियों में & पैनल फार्म इस प्रकार जाना झिलमिलाते निकालें महान काम किया: = - 1. फॉर्म = सत्य की डबल buffered संपत्ति सेट करें। 2. पेस्ट form.cs में 2 कार्यों के बाद

#region .. Double Buffered function .. 
    public static void SetDoubleBuffered(System.Windows.Forms.Control c) 
    { 
     if (System.Windows.Forms.SystemInformation.TerminalServerSession) 
      return; 
     System.Reflection.PropertyInfo aProp = typeof(System.Windows.Forms.Control).GetProperty("DoubleBuffered", 
     System.Reflection.BindingFlags.NonPublic | 
     System.Reflection.BindingFlags.Instance); 
     aProp.SetValue(c, true, null); 
    } 

    #endregion 


    #region .. code for Flucuring .. 

    protected override CreateParams CreateParams 
    { 
     get 
     { 
      CreateParams cp = base.CreateParams; 
      cp.ExStyle |= 0x02000000; 
      return cp; 
     } 
    } 

    #endregion 
  1. कॉल प्रत्येक TableLayoutPannel, Pannel, Splitcontainer, Datagridview & सभी कंटेनर नियंत्रण के लिए SetDoubleBuffered(“TableLaoutPannel_controlName”)

RhishikeshLathe के लिए धन्यवाद प्रकाशित किया गया था 16 फरवरी 14 20:11 बजे

+1

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