Ungefähr hier verlieren. Ich habe seit einer Stunde gegoogelt, um dieses kleine, aber unglaublich erschwerende Problem zu lösen.TabControl flackert, wenn das Tab-Symbol geändert wird
Ich habe eine TabControl
auf meinem Formular mit zwei Registerkarten. Jede dieser Registerkarten hat ein 16x16-Symbol und etwas Text. Nichts Verrücktes hier.
Ich muss unter bestimmten Umständen eines der Registerkartensymbole blinken lassen. Also habe ich zwei Bilder erstellt, und und fügte sie zu ImageList
von TabControl
. Ich stelle einen Hintergrund-Timer ein, der zwischen den beiden Bildern hin- und herwechselt, um ein blinkendes Symbol zu simulieren. Funktioniert gut.
Es verursacht jedoch, alle Registerkartenheader neu zu zeichnen, wodurch sie flackern.
Die TabControl
unterstützt keine Doppelpufferung, egal was Sie versuchen.
ich gefunden habe, die Menschen haben einen gewissen Erfolg Zähmung Flimmern mit diesem Code:
Protected Overrides ReadOnly Property CreateParams() As CreateParams
Get
Dim cp As CreateParams = MyBase.CreateParams
cp.ExStyle = cp.ExStyle Or &H2000000
Return cp
End Get
End Property
das funktioniert, wie in, ist es nicht flackern ... aber die Symbole ändern sich auch optisch nicht mehr, es sei denn Der Mauszeiger bewegt sich über etwas, das ein Neuzeichnen verursacht.
Hat jemand alternative Lösungen oder Tricks, die funktionieren könnten? Dies ist eigentlich ein wesentliches Merkmal der Software.
Skeleton-Code:
Public Class Form1
Dim BlinkTimer As Windows.Forms.Timer
Dim BlinkToggler As Boolean = False
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
InitBlinker()
End Sub
Private Sub InitBlinker()
BlinkTimer = New Windows.Forms.Timer
AddHandler BlinkTimer.Tick, AddressOf Blinker_Tick
With BlinkTimer
.Enabled = True
.Interval = 250
End With
StartBlinker()
End Sub
Public Sub StartBlinker()
SomeTabPage.ImageKey = "light_off.png"
BlinkToggler = False
BlinkTimer.Start()
End Sub
Public Sub StopBlinker()
SomeTabPage.ImageKey = "light_off.png"
BlinkToggler = False
BlinkTimer.Stop()
End Sub
Private Sub Blinker_Tick()
If BlinkToggler Then
SomeTabPage.ImageKey = "light_on.png"
Else
SomeTabPage.ImageKey = "light_off.png"
End If
BlinkToggler = Not BlinkToggler
End Sub
End Class
... Ich könnte WAAY hier sein, aber was ist mit einem animierten Gif und dann müssen Sie sich keine Sorgen machen? –
Die TabControl kann nicht doppelt gepuffert werden, Sie müssen also wahrscheinlich mit dieser Einschränkung leben oder Ihre blinkenden Glühbirnen so gestalten, dass sie irgendwo anders auf dem Bildschirm blinken. – LarsTech
@JohnBustos Ich habe versucht, ein animiertes gif, funktioniert nicht (nicht animieren). Das ist die Art von Vorschlag, nach der ich gesucht habe, danke. – user1003916