ここで気が狂いそうです。私はこの小さな問題を解決しようと 1 時間グーグルで検索してきましたが、信じられないほど深刻な問題です。
フォームにTabControl
2 つのタブがある。これらの各タブには、16x16 のアイコンといくつかのテキストがあります。ここではクレイジーなことは何も起こっていません。
特定の状況下で、タブ アイコンの 1 つを点滅させる必要があります。そこで、2 つのイメージを作成し、それらを で使用される に追加しました。アイコンの点滅をシミュレートするために、2 つの画像を切り替えるバックグラウンド タイマーを設定しました。正常に動作します。ImageList
TabControl
ただし、すべてのタブ ヘッダーが再描画され、ちらつきます。
は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