C#とVisual Studio 2010を搭載したWindowsフォームアプリがあります。
アプリをシステムトレイ(タスクバーではなく)に最小化し、システムトレイでダブルクリックしたときに元に戻すにはどうすればよいですか?何か案が?また、システムトレイのアイコンにメニューを作成するにはどうすればよいですか。右クリックすると、ログイン、切断、接続などのメニューが表示されます。また、システムトレイから風船がポップアップするように表示する方法はありますか?
PS:すでにnotifyIconを追加しましたが、使用方法がわかりません。
フォームのサイズ変更イベントを処理します。このハンドラーでは、Resizeイベントの基本機能をオーバーライドして、フォームをタスクバーではなくシステムトレイに最小化します。これを行うには、フォームのResizeイベントハンドラーで次の操作を実行します。フォームのWindowStateプロパティがFormWindowState.Minimizedに設定されているかどうかを確認します。はいの場合、フォームを非表示にし、NotifyIconオブジェクトを有効にして、情報を示すバルーンヒントを表示します。 WindowStateがFormWindowState.Normalになったら、Visibleプロパティをfalseに設定してNotifyIconオブジェクトを無効にします。ここで、タスクバーのNotifyIconオブジェクトをダブルクリックすると、ウィンドウが再表示されるようにします。このために、NotifyIconのMouseDoubleClickイベントを処理します。ここでは、Show()メソッドを使用してフォームを表示します。
private void frmMain_Resize(object sender, EventArgs e)
{
if (FormWindowState.Minimized == this.WindowState)
{
mynotifyicon.Visible = true;
mynotifyicon.ShowBalloonTip(500);
this.Hide();
}
else if (FormWindowState.Normal == this.WindowState)
{
mynotifyicon.Visible = false;
}
}
ソリューション全体を達成するためにこれを見つけました。上記の回答では、タスクバーからウィンドウを削除できません。
private void ImportStatusForm_Resize(object sender, EventArgs e)
{
if (this.WindowState == FormWindowState.Minimized)
{
notifyIcon.Visible = true;
notifyIcon.ShowBalloonTip(3000);
this.ShowInTaskbar = false;
}
}
private void notifyIcon_MouseDoubleClick(object sender, MouseEventArgs e)
{
this.WindowState = FormWindowState.Normal;
this.ShowInTaskbar = true;
notifyIcon.Visible = false;
}
また、フォームデザイナを使用して、通知アイコンコントロールの次のプロパティを設定することをお勧めします。
this.notifyIcon.BalloonTipIcon = System.Windows.Forms.ToolTipIcon.Info; //Shows the info icon so the user doesn't think there is an error.
this.notifyIcon.BalloonTipText = "[Balloon Text when Minimized]";
this.notifyIcon.BalloonTipTitle = "[Balloon Title when Minimized]";
this.notifyIcon.Icon = ((System.Drawing.Icon)(resources.GetObject("notifyIcon.Icon"))); //The tray icon to use
this.notifyIcon.Text = "[Message shown when hovering over tray icon]";
私は一緒に行きます
private void Form1_Resize(object sender, EventArgs e)
{
if (FormWindowState.Minimized == this.WindowState)
{
notifyIcon1.Visible = true;
notifyIcon1.ShowBalloonTip(500);
this.Hide();
}
else if (FormWindowState.Normal == this.WindowState)
{
notifyIcon1.Visible = false;
}
}
private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)
{
this.Show();
this.WindowState = FormWindowState.Normal;
}
アイコンファイルをnotifyIconに追加することを忘れないでください。追加すると、トレイに表示されなくなります。
これを試して
private void Form1_Load(object sender, EventArgs e)
{
notifyIcon1.BalloonTipText = "Application Minimized.";
notifyIcon1.BalloonTipTitle = "test";
}
private void Form1_Resize(object sender, EventArgs e)
{
if (WindowState == FormWindowState.Minimized)
{
ShowInTaskbar = false;
notifyIcon1.Visible = true;
notifyIcon1.ShowBalloonTip(1000);
}
}
private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)
{
ShowInTaskbar = true;
notifyIcon1.Visible = false;
WindowState = FormWindowState.Normal;
}
これは私がアプリケーションで使用する方法であり、かなり単純で自明ですが、コメントへの回答で詳細を説明させていただきます。
public Form1()
{
InitializeComponent();
// When window state changed, trigger state update.
this.Resize += SetMinimizeState;
// When tray icon clicked, trigger window state change.
systemTrayIcon.Click += ToggleMinimizeState;
}
// Toggle state between Normal and Minimized.
private void ToggleMinimizeState(object sender, EventArgs e)
{
bool isMinimized = this.WindowState == FormWindowState.Minimized;
this.WindowState = (isMinimized) ? FormWindowState.Normal : FormWindowState.Minimized;
}
// Show/Hide window and tray icon to match window state.
private void SetMinimizeState(object sender, EventArgs e)
{
bool isMinimized = this.WindowState == FormWindowState.Minimized;
this.ShowInTaskbar = !isMinimized;
systemTrayIcon.Visible = isMinimized;
if (isMinimized) systemTrayIcon.ShowBalloonTip(500, "Application", "Application minimized to tray.", ToolTipIcon.Info);
}
...そして、右クリック通知メニューの場合は、フォームにコンテキストメニューを追加して編集し、コンテキストメニュー項目をダブルクリックしてマウスクリックイベントを設定し、notifyiconプロパティのContextMenuStripを選択して、それをnotifyicon1に添付します。
システムトレイの画像をクリックすると、フレームが表示されているかどうかを確認でき、Visible = trueまたはfalseを設定する必要があります。