繁体   English   中英

右键单击系统任务栏中的notifyicon不会显示上下文菜单

[英]Right clicking notifyicon in system tray does not show contextmenu

我正在尝试使用带有notifyicon的contextmenustrip。 当我右键单击notifyicon时,contextmenustrip不会显示。 我尚未在网络上找到任何解决方案。 这是我的代码:

public class Program
{
    static ContextMenuStrip contextMenuStrip1;
    static ToolStripMenuItem exitToolStripMenuItem;
    static ToolStripMenuItem restoreToolStripMenuItem;
    static IContainer components;
    static NotifyIcon notifyIcon1;
    static win window = new win();
    [STAThread]
    static void Main(string[] args)
    {
        Application.EnableVisualStyles();
        Intialise();
        Application.Run();
    }
    static void Intialise()
    {
        components = new Container();
        contextMenuStrip1 = new ContextMenuStrip(components);
        restoreToolStripMenuItem = new ToolStripMenuItem();
        exitToolStripMenuItem = new ToolStripMenuItem();
        notifyIcon1 = new NotifyIcon(components);
        contextMenuStrip1.SuspendLayout();
        // 
        // restoreToolStripMenuItem
        // 
        restoreToolStripMenuItem.Name = "restoreToolStripMenuItem";
        restoreToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
        restoreToolStripMenuItem.Text = "Restore";
        restoreToolStripMenuItem.Click += new EventHandler(RestoreToolStripMenuItem_Click);
        // 
        // exitToolStripMenuItem
        // 
        exitToolStripMenuItem.Name = "exitToolStripMenuItem";
        exitToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
        exitToolStripMenuItem.Text = "Exit";
        exitToolStripMenuItem.Click += new EventHandler(ExitToolStripMenuItem_Click);
        // 
        // contextMenuStrip1
        // 
        contextMenuStrip1.Items.AddRange(new ToolStripItem[] {
        restoreToolStripMenuItem,
         exitToolStripMenuItem});
        contextMenuStrip1.Name = "contextMenuStrip1";
        contextMenuStrip1.RenderMode = ToolStripRenderMode.System;
        contextMenuStrip1.Size = new System.Drawing.Size(153, 70);
        contextMenuStrip1.Text = "File";
        // 
        // notifyIcon1
        // 
        notifyIcon1.ContextMenuStrip = contextMenuStrip1;
        notifyIcon1.Icon = Properties.Resources.stm2;
        notifyIcon1.Text = "Screen Time Monitor";
        notifyIcon1.Visible = true;
        notifyIcon1.MouseUp += new MouseEventHandler(NotifyIcon1_MouseUp);
        notifyIcon1.MouseDoubleClick += new MouseEventHandler(NotifyIcon1_MouseDoubleClick);
    }
    private static void NotifyIcon1_MouseUp(object sender, MouseEventArgs e)
    {
            if (e.Button == MouseButtons.Left)
        {
            MethodInfo mi = typeof(NotifyIcon).GetMethod("ShowContextMenu", BindingFlags.Instance | BindingFlags.NonPublic);
            mi.Invoke(notifyIcon1, null);
        }
        else if(e.Button == MouseButtons.Right)
        {
            MethodInfo mi = typeof(NotifyIcon).GetMethod("ShowContextMenu", BindingFlags.Instance | BindingFlags.NonPublic);
            mi.Invoke(notifyIcon1, null);
        }
    }
}

我尝试使用mouseUp事件打开contextmenu,但是contextmenu均未显示。 我已经看到人们在其中编写notifyIcon1.ContextMenuStrip = contextMenuStrip1;代码notifyIcon1.ContextMenuStrip = contextMenuStrip1; 那行得通。 虽然它对我不起作用。 谢谢。

该行contextMenuStrip1.SuspendLayout(); 停止显示contextmenustrip。 我已经从生成的Windows表单中复制了代码,所以我不知道为什么那行代码在那里。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM