2011-10-21 90 views
3

應用程序是爲.NET 2.0編譯的(如果它相關的話)。 最初窗體是使用ShowInTaskbar = false創建的,它不會出現在任務欄中,並且一切都很酷。但是,當某些操作(拖動窗體上的文件並開始文件上載)執行ShowInTaskbar = true時(爲了顯示更改窗口標題/ win7任務欄功能的進度),主窗體消失。 this.Show(),this.Visible = true - 他們沒有幫助。在執行ShowInTaskbar = false之前,表單無處可查。然後它出現在它失蹤的同一地點......任何想法可能發生什麼?ShowInTaskbar = true使我的表單消失

+1

更改ShowInTaskbar有很大的副作用,Winforms必須重新創建窗口。一個錯誤是表單從Application.OpenForms中消失。從來沒有聽說它被隱藏了。查看輸出窗口以查找可能的例外情況。 –

回答

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

不可否認它閃爍,當你撥動它,但這不應該是太重要了。您是否有任何可能因爲更改而被解僱的事件,這可能會隱藏您的表單?

+0

明天生病嘗試把一個測試用例放在一起,看看我是否可以複製行爲。 – marrat

1

您的應用程序在ShowInTaskBar = true和... = false之間忙嗎?

您的應用程序可能會被要求回覆消息並重新繪製其窗口,因此如果它正忙於處理並且不將控制權返回給消息處理循環,它將不會響應(並因此更新屏幕),直到你已經完成了一切。

如果出現這種情況,您可能需要在Windows.Forms.Timer上啓動處理,甚至使用另一個線程(BackgroundWorker或ThreadPool)來允許您的UI在進行處理時繼續響應。

+0

它處理事件就好了。當它顯示在任務欄上傳過程中時,顯示效果很好。 – marrat

3

我知道這個問題已在一年前問過,但它在Google搜索結果中不時彈出。

如設置ShowInTaskbar窗口時所述,重新創建整個窗體(或類似的東西)。所以,如果你有輸入字段或任何這樣的控制,他們將被重置。

在我的情況下,當我想將我的應用程序最小化到通知托盤區域時,我使用ShowInTaskbar = false,以便在最小化時我的應用程序不再出現在任務欄中。當您將應用程序還原到FormWindowState.Normal時,會出現問題,您以前擁有的所有控件都將被重置。

解決方法是在調用ShowInTaskbar = false之前從窗體中刪除所有控件「this.Controls.Remove(control1)」,然後在表單中重新添加「this.Controls.Add(control1)」被恢復。

這是我的工作。 希望它可以幫助你和其他人。

+0

感謝您的提示。 – Oliver

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

基本上我刪除和添加,如已在這裏所述的答案。我只想感謝大家幫助我提供解決方案。