3

ToolStripStatusLabel を含む StatusStrip を使用します。OS - Windows 7、フレームワーク 2.0。通常はすべて正常に表示されますが、ToolStripStatusLabel がブラック ボックスのように見えることがあります。

ここに画像の説明を入力

Windows のバグを読みましたが、どうすれば修正できますか?

4

2 に答える 2

0

このバグは修正されていません。それはフレームワーク 2 にあり、まだフレームワーク 4 にあります。

Hans からの回答は、social.msdn.microsoft.com の回答のコピーです。

しかし、「CenterScreen」は問題を解決しないので、私には役に立ちません。

問題の原因は Windows タスクバーではありません。原因は、StatusStripを描画する最初の瞬間にメイン フォームが他のウィンドウの背後にある場合に、 StatusStripを描画しないバグです。ただし、これはProcess.Start()、別のプロセスから新しいプロセスを開始し、新しいプロセスが別のプロセスのウィンドウの後ろに開いたときにも発生します。

Microsoft が提案したものよりもはるかに優れた解決策を見つけました。

最初に私は

statusStrip.Invalidate();

しかし、それは機能しません。そのため、Windows に StatusStrip を強制的に再描画させる強力な方法が必要です。重要: 再描画は、StatusStrip を含むフォームが既にフォアグラウンドにあるときに発生する必要があります。これはとても簡単なので、Microsoft がこの方法を提案しない理由がわかりません。

Timer mi_StatusTimer = new Timer();

protected override void OnLoad(EventArgs e)
{
    base.OnLoad(e);

    mi_StatusTimer.Interval = 500;
    mi_StatusTimer.Tick += new EventHandler(OnTimerBugFix);
}

protected override void OnActivated(EventArgs e)
{
    base.OnActivated(e);

    mi_StatusTimer.Start();
}

void OnTimerBugFix(object sender, EventArgs e)
{
    mi_StatusTimer.Stop();

    statusStrip.Hide();
    Application.DoEvents();
    statusStrip.Show();
}
于 2016-06-11T21:21:00.813 に答える