ここで私の心を失うことについて。私はこのマイナーな問題を解決しようと1時間はグーグルグーグルしてきましたが、信じられないほど悪化している問題です。タブのアイコンを変更するとTabControlが点滅する
私はTabControl
のフォームに2つのタブがあります。これらの各タブには、16×16のアイコンとテキストがあります。何もここで狂っていることはありません。
特定の状況でタブアイコンの1つを点滅させる必要があります。そこで、とという2つの画像を作成し、TabControl
で使用されているImageList
に追加しました。私は点滅しているアイコンをシミュレートするために2つのイメージを切り替えるバックグラウンドタイマーを設定しました。正常に動作します。
ただし、すべてのタブヘッダーが再描画されているため、ちらつきが発生しています。
TabControl
は、何をしようとしても、ダブルバッファリングをサポートしていません。
私は人々がこのコードを使用してちらつき調教いくつかの成功を持っていることがわかりました:
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
に動作すること、のように、それがちらつきはありません...しかし、アイコンは、視覚的にもしない限り、もう変更しないでくださいマウスカーソルは、再描画を引き起こすものの上を移動します。
誰か他の解決方法や機能がありますか?これは実際にはソフトウェアにとって非常に重要な機能です。
スケルトンコード:
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
...私はここから離れているかもしれませんが、アニメーションGIFはどうですか?それでは心配する必要はありませんか? –
TabControlをダブルバッファーにすることはできませんので、おそらくこの制限を守らなければなりません。または、あなたの点滅する電球が画面上のどこかで点滅するように設計する必要があります。 – LarsTech
@JohnBustos私はアニメーションGIFを試しました、動作しません(アニメーション化しません)。それは私が探していた提案の一つです。ありがとう。 – user1003916