ShowInTaskbar = true使我的表单消失

时间:2011-10-21 18:22:02

标签: c# .net winforms

App是针对.NET 2.0编译的(如果相关的话)。 最初使用ShowInTaskbar = false创建表单,它不会出现在任务栏中,一切都很酷。但是,当某些操作(在窗体上拖动文件并启动文件上载)ShowInTaskbar = true时(为了显示更改窗口标题/ win7任务栏功能的进度),主窗体将消失。 this.Show(),this.Visible = true - 他们没有帮助。在执行ShowInTaskbar = false之前,无法找到表单。然后它出现在它失踪的同一地点......任何想法可能发生什么?

4 个答案:

答案 0 :(得分:3)

我知道这个问题已经在一年前被问过,但谷歌搜索结果中仍会不时出现这个问题。

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

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

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

这是我的工作。 希望它能帮助你和其他人。

答案 1 :(得分:1)

它对我有用:

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

不可否认,当你切换它时它会闪烁,但这不应该太重要。您是否有任何可能会在更改过程中被触发的事件,这可能会隐藏您的表单?

答案 2 :(得分:1)

您的应用程序是否在ShowInTaskBar = true和... = false?

之间忙碌

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

如果是这种情况,您可能需要在Windows.Forms.Timer上启动处理,甚至使用其他线程(BackgroundWorker或ThreadPool)来允许UI在您进行处理时继续响应。

答案 3 :(得分:0)

当我将“ShowInTaskbar”设置为false时,我遇到了一个面板消失的问题。然后,当我尝试将其设置为true时,面板仍然缺失。除了面板外,所有其他控件都很好,这让我疯了。它显示“启用”,“可见”全部为真,位置和大小在“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);
        }
    }

基本上我删除并添加如答案中已经说明的那样。我只想感谢大家帮助我提供解决方案。