- PR -

タスクトレイからのフォームの表示・非表示切り替えについて

1
投稿者投稿内容
勇気
会議室デビュー日: 2004/09/22
投稿数: 11
投稿日時: 2004-10-28 19:13
OS:WindowsXP SP1
言語:Microsoft Visual C# .NET Framework 1.1


お世話になっております。

C#.NETのWindowsアプリケーションでフォームの表示・非表示を
タスクトレイのアイコンより行うプログラムを作成しています。
現在はNotifyIconコントロールを使用しタスクトレイにアイコンの追加、
ContextMenuコントロールを使いフォーム表示・非表示の制御を行っています。

ContextMenuの処理
・表示時
 フォーム.WindowState = Normal
 フォーム.ShowInTaskbar = true
・非表示時
 フォーム.WindowState = Minimized
 フォーム.ShowInTaskbar = false

上記処理を行い、希望する動作はしているのですが
非表示時にAlt+Tabのアプリケーション一覧より選択すると
フォームが表示されてしまいます。

Alt+Tabのアプリケーション一覧に表示させないために
フォームのFormBorderStyleにFixedToolWindow(あるいはSizableToolWindow)
を設定してみたのですが今度は非表示時にデスクトップ左下に最小化された
フォームが表示されてしまいます。

対応策としてフォーム.FormBorderStyle = FixedToolWindow(SizableToolWindow)
の状態でContextMenuの処理を
・表示時
 フォーム.ShowInTaskbar = true
 フォーム.Opacity = 100
 フォーム.WindowState = Normal
・非表示時
 フォーム.WindowState = Minimized
 フォーム.Opacity = 0
 フォーム.ShowInTaskbar = false

とし、Alt+Tabでも選択できず非表示時にデスクトップに表示されない状態
にはなったのですが、もっと良い方法があるのではと思い投稿させていただきました。

別の方法で上記のような処理を実現なさっている方がおられましたら
その方法をお教え願えないでしょうか。

よろしくお願いいたします。

nanbu
大ベテラン
会議室デビュー日: 2004/08/19
投稿数: 178
投稿日時: 2004-10-29 01:16
南部です。

タスクマネージャのような挙動(最小化時に隠すオプション)
を希望しているのかと思いますが(違っていたらすみません)。

1.初期状態のフォームを作成
2.NotifyIcon追加

3.最小化時に隠す処理
FormのDeactivateイベントに
コード:
private void Form1_Deactivate(object sender, System.EventArgs e)
{
  if(WindowState == FormWindowState.Minimized) 
  {
    Application.DoEvents(); //あるとなしでは大違い。
    ShowInTaskbar = false;
    this.Hide();
  }
}


のようなハンドラを追加。

4.NotifyIconダブルクリックで表示
notifyIconのDoubleClickイベントに
コード:
private void notifyIcon_DoubleClick(object sender, System.EventArgs e)
{
  ShowInTaskbar = true; //まず、これ実行
  WindowState = FormWindowState.Normal;
  this.Show();
}


のようなハンドラ追加。

ContextMenuからも同様です。

動作環境は
Window Server 2003
.NET Framework 1.1 SP1
です。
※WindowsXPでは、挙動が異なるかもしれません。
勇気
会議室デビュー日: 2004/09/22
投稿数: 11
投稿日時: 2004-10-29 10:24
nanbuさん返信ありがとうございます。

まさにこの動きです。
わたしもShowInTaskbarの設定前にHideをおいて試した時に
Alt+Tabから消えなかったので使えないものだと
思っていたのですがわたしの使い方が悪かったのですね。。。

不恰好なソースを書かずに済み助かりました。
ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)