Hello:
I have one C# WinForm project, I want to minimize it to system tray when running, and just shows one small icon in the system tray, but when I click on the icon, I want to show the whole Windows Form.
I am using .NET 5.0, so I want to use some new code samples, and I found this one:
https://learn.microsoft.com/en-us/dotnet/api/system.windows.forms.notifyicon.-ctor?view=net-5.0
The code looks good, but I found it is difficult if not possible to get it complied and running.
I have at least 2 issues when using this code sample.
First, I don’t know what kind of project template I should use. As for this sample code, it seems not a Windows Form App project, for Windows Form App, the Form1 is always in one partial class, but this code sample, it is not a partial class, it is a whole class.
Second, I tried to create one Console Application, add System.Windows.Form.dll for dependencies. Then copy and paste all the code as the following:
(I can’t add System.Drawing.Common.dll, in VS 2019, I got error: it is not supported)

using System;  
using System.Drawing;  
using System.Windows.Forms;  
namespace NotifyIconConstructor1  
    public class Form1 : Form  
        private System.Windows.Forms.NotifyIcon notifyIcon1;  
        private System.Windows.Forms.ContextMenu contextMenu1;  
        private System.Windows.Forms.MenuItem menuItem1;  
        private System.ComponentModel.IContainer components;  
        [STAThread]  
        static void Main()  
            Application.Run(new Form1());  
        public Form1()  
            this.components = new System.ComponentModel.Container();  
            this.contextMenu1 = new System.Windows.Forms.ContextMenu();  
            this.menuItem1 = new System.Windows.Forms.MenuItem();  
            // Initialize contextMenu1  
            this.contextMenu1.MenuItems.AddRange(  
                        new System.Windows.Forms.MenuItem[] { this.menuItem1 });  
            // Initialize menuItem1  
            this.menuItem1.Index = 0;  
            this.menuItem1.Text = "E&xit";  
            this.menuItem1.Click += new System.EventHandler(this.menuItem1_Click);  
            // Set up how the form should be displayed.  
            this.ClientSize = new System.Drawing.Size(292, 266);  
            this.Text = "Notify Icon Example";  
            // Create the NotifyIcon.  
            this.notifyIcon1 = new System.Windows.Forms.NotifyIcon(this.components);  
            // The Icon property sets the icon that will appear  
            // in the systray for this application.  
            notifyIcon1.Icon = new Icon("appicon.ico");  
            // The ContextMenu property sets the menu that will  
            // appear when the systray icon is right clicked.  
            notifyIcon1.ContextMenu = this.contextMenu1;  
            // The Text property sets the text that will be displayed,  
            // in a tooltip, when the mouse hovers over the systray icon.  
            notifyIcon1.Text = "Form1 (NotifyIcon example)";  
            notifyIcon1.Visible = true;  
            // Handle the DoubleClick event to activate the form.  
            notifyIcon1.DoubleClick += new System.EventHandler(this.notifyIcon1_DoubleClick);  
        protected override void Dispose(bool disposing)  
            // Clean up any components being used.  
            if (disposing)  
                if (components != null)  
                    components.Dispose();  
            base.Dispose(disposing);  
        private void notifyIcon1_DoubleClick(object Sender, EventArgs e)  
            // Show the form when the user double clicks on the notify icon.  
            // Set the WindowState to normal if the form is minimized.  
            if (this.WindowState == FormWindowState.Minimized)  
                this.WindowState = FormWindowState.Normal;  
            // Activate the form.  
            this.Activate();  
        private void menuItem1_Click(object Sender, EventArgs e)  
            // Close the form, which closes the application.  
            this.Close();  

But I got compiler errors:
Error CS1061 'NotifyIcon' does not contain a definition for 'ContextMenu' and no accessible extension method 'ContextMenu' accepting a first argument of type 'NotifyIcon' could be found (are you missing a using directive or an assembly reference?)
NotifyIconConstructor1 C:\Temp\NotifyIconConstructor1\NotifyIconConstructor1\Program.cs 44 Active
Error CS1069 The type name 'Icon' could not be found in the namespace 'System.Drawing'. This type has been forwarded to assembly 'System.Drawing.Common, Version=0.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51' Consider adding a reference to that assembly.
Error CS0234 The type or namespace name 'ContextMenu' does not exist in the namespace 'System.Windows.Forms' (are you missing an assembly reference?)
Error CS0234 The type or namespace name 'MenuItem' does not exist in the namespace 'System.Windows.Forms' (are you missing an assembly reference?)

I also tried to create one Windows Form App project using the same code, but I got the same error.
I know this code sample should work with both .Net 5.0 and .Net 6.0 preview.
I am targeting .Net 5.0 on Windows 10 (Version 20H2) using Visual Studio 2019 Version 16.9.4.
So I think the code sample should work in my environment, but it didn’t work.
Any suggestion?

Hi @john zyd ,
There are some errors in the document, ContextMenu Class and MenuItem Class are not available in .NET Core 3.1 and later versions(including .NET5).
I have reported this problem.
Here's another example you can refer to.
Notify Icon In C#
Hope it could be helpful.

Best Regards,
Xingyu Zhao
If the answer is helpful, please click "Accept Answer" and upvote it.
Note: Please follow the steps in our documentation to enable e-mail notifications if you want to receive the related email notification for this thread.