C#如何将程序最小化到系统托盘(类似于MSN Messenger)

5
我有一个c# .net应用程序。我创建了一个通知图标,它放在托盘中。我想要的是,当用户单击窗体上的“x”按钮时,它会关闭到托盘。他们只能通过使用托盘图标中的上下文菜单来退出程序。
所以我所做的是,在窗体关闭事件上,我检查窗体是否可见。如果窗体可见,我将其设置为不可见,并将showInTaskbar设置为false(模拟最小化到托盘)。如果窗体已经不可见,则他们可能是从托盘关闭它,所以在那种情况下,我将退出程序。
然而,问题在于,如果窗口可见,但他们右键单击托盘图标的上下文菜单并点击退出,我需要退出程序而不是最小化。
如何解决这个问题?

Application.exit()无法正常工作,因为它仍会触发窗体关闭事件。我认为,正如一些人已经提到的那样,我需要使用一个标志来表示请求来自哪里(托盘菜单 vs X按钮)。 - Andy Hin
3个回答

3

试试这个:

bool _closingFromMenu;

void NOTIFYICON_EXIT_MENU_HANDLER(object sender, EventArgs e)
{
    _closingFromMenu = true;
    Close();
}

//form closing handler
FormClosing +=(a,b) =>{
    if(_closingFromMenu){
        Close();
    }
    else{
        e.Cancel = true;
        //do minimize stuff;
    }
}

如果您只有一个表单,您可以在上下文菜单项处理程序中调用 Application.Exit();

0

您可能希望根据用户的操作跟踪应用程序的状态,因为这并不一定反映在窗口的状态中。因此,当用户从菜单中选择退出时,您需要设置一个标志来指示您真正退出,而不仅仅是隐藏窗口。


0

只需在上下文菜单的关闭事件中调用Application.Exit()即可。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接