ใส่โค้ดร้องในตัวสร้างหรือเหตุการณ์ OnLoad ของคุณและหากคุณใช้การควบคุมผู้ใช้แบบกำหนดเองบางประเภทที่มีการควบคุมย่อยคุณจะต้องตรวจสอบให้แน่ใจว่าการควบคุมแบบกำหนดเองเหล่านี้ได้รับบัฟเฟอร์สองครั้งด้วย (แม้ว่าในเอกสาร MS จะระบุว่า มันถูกตั้งค่าเป็นจริงตามค่าเริ่มต้น)
หากคุณกำลังทำการควบคุมแบบกำหนดเองคุณอาจต้องการเพิ่มแฟล็กนี้ใน ctor ของคุณ:
SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
คุณสามารถเลือกที่จะใช้รหัสนี้ในแบบฟอร์ม / การควบคุมของคุณ:
foreach (Control control in Controls)
{
typeof(Control).InvokeMember("DoubleBuffered",
BindingFlags.SetProperty | BindingFlags.Instance | BindingFlags.NonPublic,
null, control, new object[] { true });
}
เราทำซ้ำการควบคุมทั้งหมดในรูปแบบ / การควบคุมและการเข้าถึง DoubleBuffered
คุณสมบัติจากนั้นเราเปลี่ยนเป็นจริงเพื่อให้การควบคุมแต่ละตัวในฟอร์มบัฟเฟอร์สองครั้ง เหตุผลที่เราไตร่ตรองที่นี่เป็นเพราะจินตนาการว่าคุณมีส่วนควบคุมที่มีการควบคุมเด็กที่ไม่สามารถเข้าถึงได้ด้วยวิธีนั้นแม้ว่าจะเป็นการควบคุมส่วนตัว แต่เราก็ยังคงเปลี่ยนคุณสมบัติให้เป็นจริง
ข้อมูลเพิ่มเติมเกี่ยวกับเทคนิคบัฟเฟอร์คู่สามารถพบได้ที่นี่
มีคุณสมบัติอื่นที่ฉันมักจะแทนที่เพื่อจัดเรียงปัญหานี้:
protected override CreateParams CreateParams
{
get
{
CreateParams parms = base.CreateParams;
parms.ExStyle |= 0x00000020; // WS_EX_COMPOSITED
return parms;
}
}
WS_EX_COMPOSITED
- ระบายสีลูกหลานทั้งหมดของหน้าต่างตามลำดับการวาดภาพจากล่างขึ้นบนโดยใช้การบัฟเฟอร์สองครั้ง
ท่านสามารถหาข้อมูลเพิ่มเติมของธงรูปแบบเหล่านี้ที่นี่
หวังว่าจะช่วยได้!
UpdateStyles
หลังจากตั้งค่าเหล่านี้หรือไม่ มีเอกสารไม่ดี แต่บางครั้งอาจจำเป็น