App是针对.NET 2.0编译的(如果相关的话)。 最初使用ShowInTaskbar = false创建表单,它不会出现在任务栏中,一切都很酷。但是,当某些操作(在窗体上拖动文件并启动文件上载)ShowInTaskbar = true时(为了显示更改窗口标题/ win7任务栏功能的进度),主窗体将消失。 this.Show(),this.Visible = true - 他们没有帮助。在执行ShowInTaskbar = false之前,无法找到表单。然后它出现在它失踪的同一地点......任何想法可能发生什么?
答案 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);
}
}
基本上我删除并添加如答案中已经说明的那样。我只想感谢大家帮助我提供解决方案。