ShowInTaskbar=true使窗体消失

本文关键字:窗体 消失 true ShowInTaskbar | 更新日期: 2023-09-27 18:11:53

App是为。net 2.0编译的(如果相关的话)。最初的表单是用ShowInTaskbar=false创建的,它不会出现在任务栏中,一切都很酷。然而,当某些操作(在窗体上拖动文件并开始文件上传)执行ShowInTaskbar=true(为了显示更改窗口标题/win7任务栏功能的进度)时,主窗体消失。this.Show()。可见=真-他们没有帮助。表单无处可寻,直到执行ShowInTaskbar=false。然后它又出现在它失踪的地方……你知道会发生什么吗?

ShowInTaskbar=true使窗体消失

我知道这个问题已经问了一年多了,但它仍然时不时地出现在谷歌搜索结果中。

如设置ShowInTaskbar时所述,窗口将重新创建整个表单(或类似的东西)。所以,如果你有输入框或任何类似的控件它们会被重置。

在我的情况下,我使用ShowInTaskbar = false当我想最小化我的应用程序到通知托盘区域,这样我的应用程序不再出现在任务栏时最小化。当您将应用程序恢复到FormWindowState时,问题就出现了。正常,你之前拥有的所有控件都被重置。

解决方法是在调用ShowInTaskbar = false之前从表单中删除所有控件"this.Controls.Remove(control1)",然后在表单恢复后重新添加"this.Controls.Add(control1)"。

这就是我的工作。

它适合我:

using System.Windows.Forms;
class Test
{
    static void Main()
    {
        Form form = new Form();
        Button button = new Button { Text = "Toggle" };
        button.Click += delegate { form.ShowInTaskbar = !form.ShowInTaskbar; };
        form.Controls.Add(button);
        Application.Run(form);
    }
}

无可否认,当你切换它时,它会闪烁,但这不应该太重要。您是否有可能作为更改的一部分触发的事件,这些事件可能会隐藏您的表单?

您的应用程序在ShowInTaskBar=true和…=false之间繁忙吗?

您的应用程序可能被要求响应消息并重新绘制其窗口,因此,如果它忙于处理并且没有将控制权返回给消息处理循环,它将不会响应(因此更新屏幕),直到您完成所有操作。

如果是这种情况,你可能需要在Windows.Forms.Timer上启动你的处理,甚至使用另一个线程(BackgroundWorker或ThreadPool)来允许你的UI在你做处理时继续响应。

当我将"ShowInTaskbar"设置为false时,我有一个面板消失的问题。然后当我试图将其设置为true时,panel仍然缺失。它让我发疯,因为所有其他控制都很好,除了面板。它显示"enabled","visible"都为真,位置和大小在设置"ShowInTaskbar"之前和之后是相同的。我偶然发现了这篇文章,这对我很有用。希望对别人有所帮助。

void ShowTaskbarIcon(bool e)
    {
        try
        {
            mf.Controls.Remove(mf.pnlMain);
            mf.ShowInTaskbar = e;
            mf.Controls.Add(mf.pnlMain);
        }
        catch (Exception ex)
        {
            ec.Get(ex.ToString(), 55, 1);
        }
    }

基本上我删除和添加已经在这里的答案中说明。我只是想感谢大家帮助我提供了一个解决方案。