2011-10-21 43 views
3

アプリケーションは.NET 2.0用にコンパイルされています(該当する場合)。 最初にフォームがShowInTaskbar = falseで作成され、タスクバーに表示されず、すべてがクールです。しかし、特定のアクション(フォーム上のファイルをドラッグしてファイルを起動する)がShowInTaskbar = true(ウィンドウタイトル/ win7タスクバーの機能を変更して進行状況を表示する)を行うと、メインフォームが消えます。 this.Show()、this.Visible = true - 彼らは助けません。 ShowInTaskbar = falseが実行されるまで、フォームはどこにも見つかりません。そして、それは行方不明になった同じ場所に現れます...何が起きているのでしょうか?ShowInTaskbar = trueフォームが消えるようにする

+1

ShowInTaskbarを変更すると大きな副作用が発生するため、Winformsはウィンドウを再作成する必要があります。 1つのバグは、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

私はこの質問が1年以上前に尋ねられたことは知っていますが、それでもGoogle検索結果では時折ポップアップします。

ShowInTaskbarを設定すると、フォーム全体(またはそのようなもの)が再作成されます。したがって、入力フィールドやそのようなコントロールがあれば、リセットされます。

私の場合は、通知トレイ領域に自分のアプリケーションを最小限にするためにShowInTaskbar = falseを使用しました。これにより、アプリケーションを最小化するとタスクバーに表示されなくなりました。この問題は、アプリケーションをFormWindowState.Normalに復元したときに、以前に持っていたすべてのコントロールがリセットされたときに発生します。

回避策は、フォームから一度、ShowInTaskbar = falseを呼び出してから "this.Controls.Add(control1)"を再度追加する前に、フォームからすべてのコントロール "this.Controls.Remove(control1)"を削除することです。復元されます。

これは私の回避策です。 あなたと他の人に役立つことを願っています。

+0

ヒントをありがとう。 – Oliver

0

"ShowInTaskbar"をfalseに設定するとパネルが消える問題がありました。それから私がそれを真実に戻そうとすると、パネルはまだ失われていました。パネルを除いて、他のすべてのコントロールがうまくいっていたので、それは私にナットを運転していました。 ShowInTaskbarが設定された前後で、 "enabled"、 "visible"、true、location、およびsizeが同じであることが示されました。私はこのポストに出くわした、これは私のために働いたものです。それが他人を助けることを願って

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

基本的には、ここで回答に記載されているように削除して追加します。解決策を提供するために皆様に感謝したいと思います。