我使用包含ToolStripStatusLabel的StatusStrip。操作系统 - Windows 7,框架2.0。 通常所有显示正常,但有时ToolStripStatusLabel看起来像黑盒子:
我读过那个windows bug,但是我怎么解决它?
答案 0 :(得分:4)
这是一个模糊的错误,当您使用Windows工具栏重叠StatusStrip显示表单时会触发该错误。将窗口移离工具栏并不能使状态条上的ToolStripItem正确重新绘制。您会在this forum post中找到一些背景信息。对于它的未来修复有一个微弱的承诺,不知道是否曾经发生过。如果你在Win7上运行它可能不会。
您需要更加注意窗口的位置,确保窗口的某些部分不会消失在工具栏下方。一般来说,只要这个错误没有得到修复,你总是认为是非常重要的事情。如果你不想确定启动位置(你应该,用户倾向于喜欢在上次移动它的位置重新显示窗口),那么只需将表单的StartPosition属性更改为" CenterScreen& #34;
答案 1 :(得分:0)
此错误从未修复过。它在框架2中,仍然在框架4中。
汉斯的回答是social.msdn.microsoft.com的答案副本。
但它对我没有帮助,因为" CenterScreen"没有解决问题。
问题的原因不是Windows任务栏。原因是在绘制StatusStrip的第一时刻主窗体位于 ANY 其他窗口后面时,不会绘制StatusStrip的错误。但是当您从另一个进程使用Process.Start()
启动新进程并且新进程在另一个进程的窗口后面打开时,也会发生这种情况。
我找到了比微软提出的更好的解决方案。
首先我尝试了
statusStrip.Invalidate();
但它不起作用。所以我们需要一种更强大的方法来强制Windows重绘StatusStrip。重要说明:当具有StatusStrip的表单在前台已经是ALREADY时,必须重新绘制!这很容易,我不明白为什么微软不建议这种方法。
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();
}