2010-09-15 15 views
26

मैं अपने रूप के निर्माता कोड को यह कहा:Winforms डबल बफरिंग

this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint | ControlStyles.DoubleBuffer, true); 

लेकिन जब यह नियंत्रण लोड करता है, जब भी वे बदलने यह अभी भी बदसूरत कलाकृतियों से पता चलता (फार्म और उसके घटकों को बदलने (जरूरत को अपडेट करने में) अक्सर) ।

मुझे अलग-अलग करने की क्या ज़रूरत है?

उत्तर

53

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

आपको इसका मुकाबला करने की आवश्यकता होगी पूरे फॉर्म और नियंत्रणों को डबल-बफरिंग करना है। यह एक विकल्प है जो विंडोज एक्सपी के बाद उपलब्ध है जिसने WS_EX_COMPOSITED शैली ध्वज उपलब्ध कराया है। इसे चालू करने के अपने फार्म में चिपकाएं:

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

यह बिल्कुल भी पेंटिंग में तेजी लाने नहीं है, लेकिन फार्म विलंब के बाद स्क्रीन पर तस्वीरें। दृश्य चित्र कलाकृतियों को खत्म करना। वास्तव में देरी को ठीक करने के लिए नियंत्रणों का उपयोग नहीं करना आवश्यक है। 'नियंत्रण' खींचने के लिए ऑनपेंट विधि का उपयोग करके और ऑनमॉइसक्लिक ईवेंट को उपयोगकर्ता द्वारा 'नियंत्रण' पर क्लिक करने के बारे में स्मार्ट बनाने के द्वारा आप क्या करेंगे।

+0

WS_EX_COMPOSITED केवल एरो थीम पर नहीं, Win7/Vista के तहत क्लासिक थीम पर काम कर रहा है। इस मामले में कोई भी समाधान जानता है? – KevinBui

+4

@DKhanh - यह मेरे लिए एरो –

+0

पर काम करता है यह एक आकर्षण की तरह काम करता है (विंडोज 8 आकर्षण के लिए एक ताज़ा नहीं है, लेकिन मुझे आशा है कि यह विंडोज 8 पर भी काम करेगा, साथ ही एक्सपी, यदि आवश्यक हो तो)। –

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