ค้นหาบทความ

โพสต์แนะนำ

ย้าย Blog ไปที่ TechDiary

วันศุกร์ที่ 13 กรกฎาคม พ.ศ. 2555

.NET WinForm แก้ฟอร์ม กระพริบ ถ้ามี control เยอะๆ

ในกรณีที่ form มี control เยอะๆ (หรือ form ทีรูปเป็น background หรือมี TabControl ใน form) การเปิด form หรือ สลับ form ไปมา อาจจะทำให้เกิดการกระพริบของ control ต่างๆ ได้ ถึงแม้จะให้ Double Buffer เป็น true แล้วก็ตาม นี่คือโค้ด การ override property ของ form ที่ชื่อว่า CreateParams


ปกติแล้วเวลา form (หรือ control อื่นๆ) ทำการ update ตัวเอง (Paint) มันจะวาดทับพื้นที่ทั้งหมดของตัวเอง แล้ว วาด control ที่อยู่ในตัวมันใหม่อีกที ทำให้หากมี control เยอะๆ จะเกิดการกระพริบในการวาด
ตัวเลข style ที่เป็นเลข &H2000000 ก็คือ style ที่ชื่อว่า WS_CLIPCONTROLS เป็นการบอกว่า ให้วาดเฉพาะส่วนที่ไม่มี control อื่นๆ อยู่เท่านั้น จึงทำให้การวาด (paint) เร็วขึ้น



Protected Overrides ReadOnly Property CreateParams() As _
System.Windows.Forms.CreateParams
        Get
            Dim cp As CreateParams = MyBase.CreateParams
            Dim OSVer As Version = _
            System.Environment.OSVersion.Version()


            Select Case OSVer.Major
                Case 5
                    If OSVer.Minor > 0 Then
                        cp.ExStyle = cp.ExStyle Or &H2000000
                    End If
                Case Is > 5
                    cp.ExStyle = cp.ExStyle Or &H2000000
            End Select


            Return cp


        End Get
End Property


สาเหตุที่ต้องตรวจสอบ version ของ windows เนื่องจากใน Windows ที่ต่ำกว่า XP จะทำให้ form แบบ MDI กิน cpu มาก จนทำให้โปรแกรมแฮงก์ได้


Credit: 
Stuart Blackler@http://sblackler.net
Marius Bancila@http://www.codeguru.com



วันอังคารที่ 10 กรกฎาคม พ.ศ. 2555

Bye bye Thunder Bird

Mozilla plans to let go of its open-source e-mail software, with hopes that other people will keep Thunderbird alive, TechCrunch says.

Read more: download.cnet.com