में TableLayoutPanel में झिलमिलाहट से बचने के लिए कैसे मैं उपस्थिति अंकन उद्देश्यों के लिए एक TableLayoutPanel का उपयोग कर रहा हूँ। मैंने इस TableLayoutPanel के अंदर नियंत्रण (एक पैनल और एक लेबल) जोड़ा है और उनके लिए घटनाएं बनाई हैं। कुछ स्थितियों में मैंने सभी नियंत्रणों को मंजूरी दे दी है और TableLayoutPanel की अलग-अलग स्थिति में समान नियंत्रणों को बांधने के लिए आगे बढ़े हैं। नियंत्रण को फिर से बाध्य करते समय, TableLayoutPanel झिलमिलाहट और प्रारंभ करने में बहुत धीमी है।सी # .net
उत्तर
लेआउट को तब तक निलंबित करें जब तक कि आपने अपने सभी नियंत्रण जोड़े नहीं हैं।
TableLayoutPanel panel = new TabelLayoutPanel();
panel.SuspendLayout();
// add controls
panel.ResumeLayout();
डबल बफरिंग का उपयोग करने पर भी देखें। आपको TableLayoutPanel का उप-वर्ग बनाना होगा। उदाहरण here देखें।
ऊपर का सुधार के रूप में, मैं के साथ बेहतर परिणाम था:
TableLayoutPanel panel = new TabelLayoutPanel();
panel.SuspendLayout();
panel.StopPaint();
// add controls
panel.ResumePaint();
panel.ResumeLayout();
'स्टॉपपेंट' और 'रेज़्यूमेन्ट' टेबललेआउट पैनेल नियंत्रण के मूल तरीके नहीं हैं। आप स्पष्ट रूप से एक एक्सटेंशन का उपयोग कर रहे हैं, जिसे आपने अपने उत्तर में शामिल नहीं किया था। – LarsTech
उपयोग संपत्ति 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; }
}
}
क्या आप वर्णन कर सकते हैं कि डीबीफर को सही क्यों सेट किया जाना चाहिए? –
एक और सवाल पर प्रस्तुत इस कोड को किसी न किसी यह है, यह TableLayoutPanel redraw सेट करने के लिए एक API कॉल का उपयोग करता है।
इस के लिए मुझे 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
- कॉल प्रत्येक
TableLayoutPannel
,Pannel
,Splitcontainer
,Datagridview
& सभी कंटेनर नियंत्रण के लिएSetDoubleBuffered(“TableLaoutPannel_controlName”)
।RhishikeshLathe के लिए धन्यवाद प्रकाशित किया गया था 16 फरवरी 14 20:11 बजे
वहां एक उद्धरण ब्लॉक जोड़ा गया। हालांकि ध्यान दें कि अन्य पदों के लिए सिर्फ एक लिंक जोड़ना और सभी सामग्री की प्रतिलिपि बनाना एक उचित विशेषता नहीं है, प्रति से। यदि आपके पास लिंक में विवरण से अलग करने के लिए कुछ भी नहीं है, तो उन्हें हमेशा टिप्पणी के रूप में छोड़ना बेहतर होता है। अगली बार देखभाल करें। –
यह मददगार था, मैं अब काफी कम घबराना हो रही है। धन्यवाद। – Jmnstr