Winforms - システム トレイをダブルクリックした後の "Show()" がアプリを最小化してしまうのはなぜですか?
通知アイコンのダブルクリックイベントで、非表示のメインフォームが最小化されずに(最大化もされず)通常どおりに表示されるようにするにはどうすればよいですか
Winforms - システム トレイをダブルクリックした後の "Show()" がアプリを最小化してしまうのはなぜですか?
通知アイコンのダブルクリックイベントで、非表示のメインフォームが最小化されずに(最大化もされず)通常どおりに表示されるようにするにはどうすればよいですか
アクションを最小限に抑えるために、アプリケーションをトレイに置いたと思います。その場合、Showは可視性を復元するだけです。
form.WindowState = Normal
Show()の前に追加してみてください。
NotifyIconを使用してフォームを非表示にすることが望ましい場合が多いため、アプリはすぐにトレイから開始されます。SetVisibleCore()メソッドをオーバーライドすることで、表示されないようにすることができます。また、通常、ユーザーがXボタンをクリックしたときに閉じないようにし、OnFormClosingメソッドをオーバーライドしてフォームを非表示にします。ユーザーが実際にアプリを終了できるようにするためのコンテキストメニューが必要になります。
NotifyIconとContextMenuStripをフォームに追加します。CMSに[表示]および[終了]メニューコマンドを指定します。フォームコードを次のようにします。
public partial class Form1 : Form {
bool mAllowClose;
public Form1() {
InitializeComponent();
notifyIcon1.DoubleClick += notifyIcon1_DoubleClick;
notifyIcon1.ContextMenuStrip = contextMenuStrip1;
showToolStripMenuItem.Click += notifyIcon1_DoubleClick;
exitToolStripMenuItem.Click += (o, e) => { mAllowClose = true; Close(); };
}
protected override void SetVisibleCore(bool value) {
// Prevent form getting visible when started
// Beware that the Load event won't run until it becomes visible
if (!this.IsHandleCreated) {
this.CreateHandle();
value = false;
}
base.SetVisibleCore(value);
}
protected override void OnFormClosing(FormClosingEventArgs e) {
if (!this.mAllowClose) { // Just hide, unless the user used the ContextMenuStrip
e.Cancel = true;
this.Hide();
}
}
void notifyIcon1_DoubleClick(object sender, EventArgs e) {
this.WindowState = FormWindowState.Normal; // Just in case...
this.Show();
}
}