C#学习教程:单实例Windows窗体应用程序,最小化托盘在最小化窗口的同时,它移动到系统托盘并隐藏在任务栏中。如果您单击系统托盘中的通知图标,该窗口将被带到最前面。publicvoidnotifyicon_MouseClick(objectsender,System.EventArgse){notifyicon.Visible=false;展示();启用();TopMost=真;带到前面();this.WindowState=FormWindowState.Normal;但我的实际需求是,当应用程序被第二次点击时,应用程序需要从系统托盘中恢复。为此,我在Program.cs中尝试了以下代码:staticvoidMain(){if(IsServiceManagerAlreadyRunning()){Form1form1=newForm1();form1.Restore();}else{Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);应用程序运行(新Form1());}}在Form1.cs中:publicvoidRestore(){notifyicon.Visible=false;展示();启用();TopMost=真;前置();this.WindowState=FormWindowState.Normal;我的实际问题是,如果应用程序已经在运行,则“resume”方法正在运行并且其中列出的所有操作都在运行并且窗口被带到最前面。但是在这些操作之后,窗口再次进入系统托盘。不要坐在前面。有人可以为此提供解决方案吗?要制作单例,请将对Microsoft.VisualBasic.dll的引用添加到项目并将此类添加到项目:usingSystem;使用Microsoft.VisualBasic.ApplicationServices;使用System.Windows.Forms;namespaceSample{公共类ApplicationController:WindowsFormsApplicationBase{privateFormmainForm;publicApplicationController(Formform){//Wekeepareferencetomainform//运行并在需要将其置于最前面时使用它mainForm=form;this.IsSingleInstance=true;this.StartupNextInstance+=this_StartupNextInstance;}voidthis_StartupNextInstance(objectsender,StartupNextInstanceEventArgse){//这里我们把应用程序带到前面e.BringToForeground=true;mainForm.ShowInTaskbar=true;mainForm.WindowState=FormWindowState.Minimized;主窗体。WindowState=FormWindowState.Normal;}protectedoverridevoidOnCreateMainForm(){this.MainForm=mainForm;然后使用Program.cs中的ApplicationController来运行程序:usingSystem;使用System.Windows.Forms;namespaceSample{staticclassProgram{//////应用程序的主要入口点。///[STAThread]staticvoidMain(){Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);//创建一个控制器并传递应用程序主窗体的实例varcontroller=newSample.ApplicationController(newYourMainForm());//运行应用程序controller.Run(Environment.GetCommandLineArgs());现在你的应用程序是单实例的,当你点击你的exe文件时,不是运行另一个实例,而是将现有实例放在最前面使用NotifyIcon将NotifyIcon放在主窗体上,然后在单击最小化按钮时隐藏窗口并在单击通知图标时显示窗口,您可以处理这些事件://当单击通知图标时,我们将窗体带到frontprivatevoidnotifyIcon_Click(objectsender,EventArgse){this.ShowInTaskbar=true;this.WindowState=FormWindowState.Minimized;这个。显示();this.WindowState=FormWindowState.Normal;}//这里我们检查用户是否最小化了窗口,我们隐藏了窗体这个。隐藏();}}//当表单隐藏时,我们显示通知图标,当表单可见时,我们隐藏它问题是main()中if块的两个分支都创建了一个新表单,因此您没有对已经运行的表单做任何事情。如果程序的某个实例已经在运行(IsServiceManagerAlreadyRunning()==true?),您需要从第一个实例中找到窗口并激活它,而不是创建一个新窗体。您可以尝试按窗口标题或更复杂的解决方案查找窗口。Google搜索“WindowsApplicationSingleInstance”会返回几篇文章。我觉得这就像你需要的:-以上就是C#学习教程的全部内容:单实例Windows窗体应用程序,最小化托盘共享,如果对大家有用,需要了解更多C#学习教程,望采纳更多关注—publicpartialclassForm1:Form{publicForm1(){InitializeComponent();}privatevoidnotifyIcon1_Click(objectsender,EventArgse){this.Show();this.WindowState=FormWindowState.Normal;}privatevoidForm1_ResizeBegin(objectsender,EventArgse){if(WindowState==FormWindowState.Minimized){this.Hide();}}}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
