الحد من وميض عند تغيير الصور في لوحة
سؤال
وكيف يمكنني تقليل وميض في لوحة vb2005؟ داخل لوحة الأم لدي 2 اللوحات الأخرى أنني أستخدمه.
وومعظم لوحة الخارجي يحتوي على العفريت خلفية واثنين من لوحات أعمق أكثر من أن تغيير لتناسب الأماكن في العفريت الخلفية.
وعندما أقوم بتغيير العفاريت تراكب أود أن تقلل من وميض وجعلها الانتقال السلس من شبح واحد إلى آخر.
وهنا هو رمز الذي يغير الصور في لوحات تراكب لم يتم تغيير لوحة تراكب إذا كانت قيمة جديدة هي نفس القيمة القديمة
Private Sub TrackBar2_Scroll(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TrackBar2.Scroll, TrackBar1.Scroll
If (Panel2.Tag <> TrackBar1.Value) Then
Panel2.Tag = TrackBar1.Value
Panel2.BackgroundImage = tops(TrackBar1.Value) //img array for the top panel
Panel2.Update()
End If
If (Panel3.Tag <> TrackBar2.Value) Then
Panel3.Tag = TrackBar2.Value
If (TrackBar2.Value > 0) Then
Panel3.Location = New Point(182, 210)
Else
Panel3.Location = New Point(182, 209)
End If
Panel3.BackgroundImage = bottoms(TrackBar2.Value)//img array for the bottom panel
Panel3.Update()
End If
المحلول
وأنت لن تحب هذا الجواب. ويتسبب وميض من حقيقة أن لوحة الافتراضي. NET لا مضاعفة مخزنة - لذلك يفعل كل رسم مباشرة في ذاكرة مرئية، لا منطقة عازلة الخلفي.
وتحتاج إلى فئة فرعية من الدرجة الفريق وتمكين التخزين المؤقت المزدوج على الطبقة الجديدة. ويمكن القيام بذلك عن طريق القيام
SetStyle
والدعوة في منشئ مع أعلام OptimisedDoubleBuffering وتمكين DoubleBuffering.
وبمجرد الانتهاء من الدرجة وحة الجديدة التي يتم تخزينها مؤقتا مزدوج، يمكنك استخدامها في التطبيق الخاص بك بدلا من لوحة قياسية.
وقلت لك أنك لن ترغب الإجابة؛)
نصائح أخرى
ورين هو الصحيح، إن شاء subclasses ترث هو أفضل وسيلة. في غضون ذلك على الرغم من تغيير تلك الدعوة من تحديث ليبطل. قد تساعد قليلا.