当我关闭表单时,我试图使我的应用程序最小化到系统托盘。
我希望它最小化到托盘时,关闭按钮(红色'X')被点击,最好是当窗口是正确的点击和‘关闭’选定的任务栏。
然而,我希望其他形式的关闭保持原样。也就是。‘’Alt F4‘和编码'Form.Close()’
我试着寻找一个解决方案,发现有一个“FormClosingEvent.CloseReason”包含'CloseReason.UserClosing‘。
当我单击“关闭”按钮时,它会被标记,但不幸的是,当我使用'Alt-F4‘和代码使用'Form.Close()’时,也会标记它。
我发现了几种拦截'Alt-F4‘的方法,这些对我都没有用,我希望'Alt-F4’保持原样。
为了澄清,我只想截取:‘关闭’按钮(红色'X')被点击和右键单击关闭在任务栏。
你可以这样想:
1. The user clicks the red 'x'
2. The red 'x' calls a method/event
3. The method/event calls Form.Close()我想在到达Form.Close()之前拦截,最好是在2发生之前。有办法这样做吗?
我不知道关闭表格和申请的所有方法。在我认识的人中:
我希望这能帮上忙。
谢谢你能提供的帮助。
辛西娅
发布于 2014-09-10 23:18:08
我建议使用一个标志(例如bool _allowClose;)。您说您已经可以拦截Alt-F4,我假设在关闭事件发生之前就会发生这种情况。
在Alt-F4截取期间,设置_allowClose = true,然后在关闭事件期间,仅在_allowClose == true时才允许关闭。这可能不是最干净的方法,但它在过去对我起过作用。
例如:
public class MyForm : Form
{
bool _allowClose = false;
void Form_KeyDown(object sender, KeyEventArgs e)
{
if (e.Alt && e.KeyCode == Keys.F4) _allowClose = true;
}
void Form_FormClosing(object sender, FormClosingEventArgs e)
{
if (!_allowClose && e.CloseReason == CloseReason.UserClosing)
{
e.Cancel = true;
WindowState = FormWindowState.Minimized;
}
}
}发布于 2014-09-10 23:43:45
试试这个,但是我的键盘上没有函数键来测试ALT+F4事件。
protected override void WndProc(ref Message m)
{
int WM_SYSCOMMAND = 0x0112;
int SC_CLOSE = 0xF060;
if (m.Msg == WM_SYSCOMMAND && m.WParam == new IntPtr(SC_CLOSE))
{
WindowState = FormWindowState.Minimized;
return;
}
base.WndProc(ref m);
}
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (keyData == (Keys.Alt | Keys.F4))
{
this.Close();
return true;
}
return base.ProcessCmdKey(ref msg, keyData);
}发布于 2014-09-11 05:24:45
这个简单的方法正在起作用。
将NotifyIcon控件放置到窗体中
将图标文件应用于窗体图标属性
this.Closing事件可能不会出现在预测/智能感知中,所以将其写下来,它将工作。
public Form1()
{
InitializeComponent();
this.Closing += Form1_Closing;
notifyIcon1.Icon = this.Icon;
notifyIcon1.Click += notifyIcon1_Click;
}
void Form1_Closing(object sender, CancelEventArgs e)
{
e.Cancel = true;
notifyIcon1.Visible = true;
Hide();
}
void notifyIcon1_Click(object sender, EventArgs e)
{
Show();
notifyIcon1.Visible = false;
}您还可以添加气球提示,就像应用程序在通知托盘中运行一样。
https://stackoverflow.com/questions/25776539
复制相似问题