[英]How to get system tray functionality WITHOUT using NotifyIcon.ContextMenu?
[英]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.