首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何不使用NotifyIcon.ContextMenu获得系统托盘功能?

如何不使用NotifyIcon.ContextMenu获得系统托盘功能?
EN

Stack Overflow用户
提问于 2009-10-04 12:03:16
回答 2查看 1.6K关注 0票数 0

当用户右键单击系统托盘中的通知图标时,我试图让我的应用程序显示弹出上下文菜单.但这有个转折。

我知道,用于获取系统托盘中的图标的NotifyIcon类具有ContextMenu属性。我不想用它来获得一个右键弹出菜单,因为它总是显示一个右键弹出菜单,并且永远不会做任何其他事情。当我的主窗体显示模态对话框时,我希望右击激活主窗体,而不是显示弹出菜单。

那么,我猜我需要使用NotifyIcon.MouseClick事件,并在该事件中手动弹出菜单?到目前为止,我要说的是:

代码语言:javascript
运行
复制
private NotifyIcon trayIcon;
private ContextMenu iconMenu;

private void frmMain_Load(object sender, EventArgs e) {
    // [...]
    this.trayIcon.MouseClick += new MouseEventHandler(trayIcon_MouseClick);
    iconMenu = new ContextMenu();
    // [...]
}

private void trayIcon_MouseClick(object sender, MouseEventArgs ea) {
    this.iconMenu.Show(Program.instanceFrmMain, new Point(System.Windows.Forms.Cursor.Position.X - Program.instanceFrmMain.Left, System.Windows.Forms.Cursor.Position.Y - Program.instanceFrmMain.Top));
}

注意,在iconMenu.Show中,由于它需要与父控件(我在这里的主要形式)之间的弹出协调,所以我不得不从弹出的协调器中减去父控件的协调,这是我已经不想做的。

除此之外,以下是我遇到的问题:

  • 虽然在右击时会弹出,但如果我点击菜单之外的其他地方,它不会关闭。
  • 菜单不会完全弹出在正确的位置;对于其他系统托盘应用程序,它会弹出,因此它的右下角或左下角在鼠标光标的顶端。对于我的,弹出菜单在屏幕的底部,鼠标光标的一侧。

有什么办法能让这件事更好吗?我知道,很多其他应用程序可以手动处理弹出菜单的显示,而不是使用一些NotifyIcon.ContextMenu属性。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-10-10 18:29:42

好吧,我没有得到我想要的功能,就像我在最初的问题中描述的那样,但是我设法找到了一种方法,用另一种方法来达到预期的效果。

我确实将一个ContextMenu附加到trayIcon.ContextMenu属性,但我将事件处理程序代码附加到上下文菜单本身的Popup属性。如果在该处理程序中,我.Clear ContextMenu实际上根本没有出现,允许我的代码选择有效地阻止Tray图标的弹出菜单显示它是否愿意。这就是我想要达到的效果。如果我在ContextMenu事件处理程序代码中填充Popup,就会像往常一样弹出包含我填充它的内容的菜单。

所以,我设法用不同的方法解决了这个问题。:-)

票数 -1
EN

Stack Overflow用户

发布于 2009-10-04 12:24:43

使用ContextMenuStrip属性而不是ContextMenuContextMenuStrip类有一个Opening事件,您可以通过设置e.Cancel = true取消该事件。这样,您就不必担心菜单的位置,因为菜单是自动处理的。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1516238

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档