Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ToolStripStatusLabel显示为黑框_C#_.net_Statusstrip_Toolstripstatuslabel - Fatal编程技术网

C# ToolStripStatusLabel显示为黑框

C# ToolStripStatusLabel显示为黑框,c#,.net,statusstrip,toolstripstatuslabel,C#,.net,Statusstrip,Toolstripstatuslabel,我使用包含ToolStripStatusLabel的StatusStrip。操作系统-Windows7,框架2.0。 通常所有显示为正常,但有时ToolStripStatusLabel看起来像黑匣子: 我读到了这个windows错误,但是我如何修复它呢?这是一个模糊的错误,当您显示窗体时,windows工具栏与状态条重叠时触发。将窗口移离工具栏不会使状态栏上的ToolStripItems正确重新绘制。你会在这本书中找到一些背景知识。对于未来的修复,人们的希望很渺茫,不知道这是否发生过。如果您在

我使用包含ToolStripStatusLabel的StatusStrip。操作系统-Windows7,框架2.0。 通常所有显示为正常,但有时ToolStripStatusLabel看起来像黑匣子:


我读到了这个windows错误,但是我如何修复它呢?

这是一个模糊的错误,当您显示窗体时,windows工具栏与状态条重叠时触发。将窗口移离工具栏不会使状态栏上的ToolStripItems正确重新绘制。你会在这本书中找到一些背景知识。对于未来的修复,人们的希望很渺茫,不知道这是否发生过。如果您在Win7上运行此功能,则可能不会


您需要更加注意窗口的位置,确保它的某些部分不会消失在工具栏下面。总的来说,只要这个bug没有得到修复,你会一直认为非常重要。如果您不想确定启动位置(您应该这样做,用户倾向于在上次移动窗口的位置重新显示窗口),那么只需将表单的StartPosition属性更改为“CenterScreen”。

此错误从未被修复。它在框架2中,现在仍然在框架4中

Hans的答案是social.msdn.microsoft.com上答案的副本

但这对我没有帮助,因为“中心屏幕”并不能解决问题

问题的原因不是Windows任务栏。原因是一个错误,当主窗体在绘制StatusStrip的第一刻位于任何其他窗口之后时,它没有绘制StatusStrip。但是,当您从另一个进程使用
process.start()
启动新进程,并且新进程在另一个进程的窗口后面打开时,也会发生这种情况

我找到了一个比微软提出的更好的解决方案

首先我试着用

statusStrip.Invalidate();
但它不起作用。因此,我们需要一种更强大的方法来强制Windows重新绘制StatusStrip。重要提示:当带有StatusStrip的表单已经在前台时,必须重新绘制!这是如此简单,我不明白为什么微软不建议这种方法

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();
}

尝试将表单的
DoubleBuffered
设置为
True
,如果您没有完成之前的旧问题,但我又问了一遍,然后在发现此问题时将我自己的问题标记为重复问题。。。从那时起,我已经放弃了状态条,取而代之的是带有文本框、进度条、图像等的面板。它解决了我的黑盒问题。我想和大家分享一下。谢谢你对我问题的澄清。确立主要形式的立场确实有帮助。