【发布时间】:2014-10-27 12:43:24
【问题描述】:
我有一个主要通过 NotifyIcon 的 ContextMenuStrip 操作的应用程序
ToolStripMenuItem 有多个级别,用户可以浏览它们。
问题是,当用户有两个屏幕时,MenuItems 会在没有可用空间时跳转到第二个屏幕。像这样:
如何强制他们停留在同一个屏幕上?我尝试在网上搜索,但找不到合适的答案。
这是我用来测试这个场景的一段代码示例:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
var resources = new ComponentResourceManager(typeof(Form1));
var notifyIcon1 = new NotifyIcon(components);
var contextMenuStrip1 = new ContextMenuStrip(components);
var level1ToolStripMenuItem = new ToolStripMenuItem("level 1 drop down");
var level2ToolStripMenuItem = new ToolStripMenuItem("level 2 drop down");
var level3ToolStripMenuItem = new ToolStripMenuItem("level 3 drop down");
notifyIcon1.ContextMenuStrip = contextMenuStrip1;
notifyIcon1.Icon = ((Icon)(resources.GetObject("notifyIcon1.Icon")));
notifyIcon1.Visible = true;
level2ToolStripMenuItem.DropDownItems.Add(level3ToolStripMenuItem);
level1ToolStripMenuItem.DropDownItems.Add(level2ToolStripMenuItem);
contextMenuStrip1.Items.Add(level1ToolStripMenuItem);
}
}
【问题讨论】:
-
尝试用表单设计器添加,看看生成了什么代码。也许你只是错过了一项任务。行为看起来很奇怪,例如“3 级下拉菜单”无法确定父级(与父级保持相同的屏幕)。
-
这是表单设计器。我只是为了可读性对其进行了一些重构。 (将字段转换为本地,并删除了不必要的行)
-
它一直在发生。我玩了一段时间,似乎如果上下文菜单足够近,就像图片中一样,它将扩展到第二个监视器,但是如果我将名称更改为“级别#工具提示”,这是一个字符少比原来的,然后不知何故它仍然在同一个屏幕上。
标签: c# winforms multiple-monitors notifyicon toolstripdropdown