代码之家  ›  专栏  ›  技术社区  ›  Tester101

NotifyIcon未显示

  •  2
  • Tester101  · 技术社区  · 17 年前

    
        static class MainEntryClass
        {
            /// 
            /// The main entry point for the application.
            /// 
            [STAThread]
            static void Main()
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                C2F TestApp = new C2F();
                Application.Run();
                TestApp.Dispose();
            }
        }
    
        class C2F 
        {
            public C2F()
            {
                InitializeComponent();
                loadSettings();
            }
    
            private void InitializeComponent()
            {
                this.components = new System.ComponentModel.Container();
                System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(C2F));
                this.niC2F = new System.Windows.Forms.NotifyIcon(this.components);
                this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components);
                this.settingsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
                this.separatorToolStripMenuItem = new System.Windows.Forms.ToolStripSeparator();
                this.exitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
                this.contextMenuStrip1.SuspendLayout();
                // 
                // niC2F
                //
                this.niC2F.BalloonTipText = "MyApp";
                this.niC2F.Icon = ((System.Drawing.Icon)(Clipboard2File.Properties.Resources.ResourceManager.GetObject("MyIcon.ico")));
                this.niC2F.Text = "MyApp";
                this.niC2F.ContextMenuStrip = this.contextMenuStrip1;
                this.niC2F.ShowBalloonTip(5);
                this.niC2F.Visible = true;
                this.niC2F.MouseClick += new System.Windows.Forms.MouseEventHandler(this.niC2F_MouseClick);
                // 
                // contextMenuStrip1
                // 
                this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
                this.settingsToolStripMenuItem,
                this.separatorToolStripMenuItem,
                this.exitToolStripMenuItem});
                this.contextMenuStrip1.Name = "contextMenuStrip1";
                this.contextMenuStrip1.Size = new System.Drawing.Size(153, 76);
                // 
                // settingsToolStripMenuItem
                // 
                this.settingsToolStripMenuItem.Name = "settingsToolStripMenuItem";
                this.settingsToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
                this.settingsToolStripMenuItem.Text = "Settings";
                this.settingsToolStripMenuItem.Click += new System.EventHandler(this.settingsToolStripMenuItem_Click);
                // 
                // separatorToolStripMenuItem
                // 
                this.separatorToolStripMenuItem.Name = "separatorToolStripMenuItem";
                this.separatorToolStripMenuItem.Size = new System.Drawing.Size(149, 6);
                this.separatorToolStripMenuItem.Click += new System.EventHandler(this.exitToolStripMenuItem_Click);
                // 
                // exitToolStripMenuItem1
                // 
                this.exitToolStripMenuItem.Name = "exitToolStripMenuItem1";
                this.exitToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
                this.exitToolStripMenuItem.Text = "Exit";
            }
    
            private System.ComponentModel.IContainer components = null;
            private Form1 frmSettings = new Form1();
            private Settings C2FSettings = new Settings();
            private System.Windows.Forms.NotifyIcon niC2F;
            private System.Windows.Forms.ContextMenuStrip contextMenuStrip1;
            private System.Windows.Forms.ToolStripMenuItem settingsToolStripMenuItem;
            private System.Windows.Forms.ToolStripSeparator separatorToolStripMenuItem;
            private System.Windows.Forms.ToolStripMenuItem exitToolStripMenuItem;
         }
    
    2 回复  |  直到 13 年前
        1
  •  8
  •   Jared Harley    17 年前

    实际上,我刚刚完成了一个以NotifyIcon开始的项目。你的代码(我猜你只是提供了一个片段)与我的非常相似。

    我检查了你的代码,为了让它工作,我所做的唯一更改就是将你调用图标的方式更改为:

    this.niC2F.Icon = new System.Drawing.Icon(@"C:\PathToIcon\iconfile.ico");
    

    下面是一个具有右键菜单和双击功能的工作示例:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Windows.Forms;
    
    namespace TestApp
    {
        static class MainEntryClass
        {
            /// 
            /// The main entry point for the application.
            /// 
            [STAThread]
            static void Main()
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                C2F TestApp = new C2F();
                Application.Run();
            }
        }
    
        class C2F
        {
            System.ComponentModel.Container component;
            System.Drawing.Icon icon;
            ContextMenuStrip rightClickMenu = new ContextMenuStrip();
            NotifyIcon trayIcon;
            ToolStripMenuItem options = new ToolStripMenuItem();
            ToolStripMenuItem restore = new ToolStripMenuItem();
            ToolStripMenuItem exit = new ToolStripMenuItem();
            ToolStripSeparator seperator = new ToolStripSeparator();
    
            public C2F()
            {
                InitializeComponent();
            }
    
            private void InitializeComponent()
            {
                icon = new System.Drawing.Icon(@"C:\PathToIcon\iconfile.ico");
                component = new System.ComponentModel.Container();
                trayIcon = new NotifyIcon(component);
                trayIcon.Text = "Bill Reminder";
                trayIcon.Icon = icon;
                trayIcon.Visible = true;
                trayIcon.DoubleClick += new EventHandler(trayIcon_DoubleClick);
                trayIcon.ContextMenuStrip = rightClickMenu;
    
                rightClickMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[]
                {
                    options,
                    seperator,
                    restore,
                    exit
                });
    
                options.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
                options.Text = "Options";
                options.Click += new EventHandler(options_Click);
    
                restore.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
                restore.Text = "Restore Window";
                restore.Click += new EventHandler(restore_Click);
    
                exit.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
                exit.Text = "Exit";
                exit.Click += new EventHandler(exit_Click);
            }
    
            void exit_Click(object sender, EventArgs e)
            {
                Application.Exit();
            }
    
            void restore_Click(object sender, EventArgs e)
            {
                FormName showWindow = new FormName();
                showWindow.Show();
            }
    
            void options_Click(object sender, EventArgs e)
            {
                Settings_Window settings = new Settings_Window();
                settings.Show();
            }
    
            void trayIcon_DoubleClick(object sender, EventArgs e)
            {
                FormName showWindow = new FormName();
                showWindow.Show();
            }
        }
    
    }
    

        2
  •  5
  •   mistika    12 年前

    NotifyIcon控件内部使用Shell_NotifyIcon本机方法,但不检查返回值。如果Shell_NotifyIcon返回FALSE,您将永远不会收到通知。