我有一个包含 26 个项目和一个附加ToolStripTextBox
菜单项的系统托盘上下文菜单。ToolStripMenuItem
Visible property
当用户在过滤器文本框中输入文本时,它会在用户键入时不断过滤菜单项,并通过将 设置为动态隐藏类别false
。
它正在工作!
问题是当它被过滤时,上下文菜单的高度从底部到顶部变得更短。菜单的原点是右上角,导致它向上收缩。由于它是与系统托盘相关的上下文菜单,因此我希望它会向下收缩(底部重力)。
如何做到这一点?
我有一个包含 26 个项目和一个附加ToolStripTextBox
菜单项的系统托盘上下文菜单。ToolStripMenuItem
Visible property
当用户在过滤器文本框中输入文本时,它会在用户键入时不断过滤菜单项,并通过将 设置为动态隐藏类别false
。
它正在工作!
问题是当它被过滤时,上下文菜单的高度从底部到顶部变得更短。菜单的原点是右上角,导致它向上收缩。由于它是与系统托盘相关的上下文菜单,因此我希望它会向下收缩(底部重力)。
如何做到这一点?
仍然不确定是否有“正确的”内置方法可以做到这一点......
同时,这里有一个 hack,只要大小发生变化,就会改变 ContextMenuStrip 的 Bounds()。它只是将 ContextMenuStrip 向下/向上移动了多少高度变化。我已经连接了 ContextMenuStrip 的 Opened() 和 SizeChanged() 事件,并将最后一个 Bounds() 存储在类级别的“lastBounds”变量中:
private Rectangle lastBounds;
private void contextMenuStrip1_Opened(object sender, EventArgs e)
{
lastBounds = contextMenuStrip1.Bounds;
}
private void contextMenuStrip1_SizeChanged(object sender, EventArgs e)
{
Rectangle rc = contextMenuStrip1.Bounds;
int diff = lastBounds.Height - rc.Height;
if (diff > 0)
{
contextMenuStrip1.Bounds = new Rectangle(new Point(rc.X, rc.Y + diff), rc.Size);
lastBounds = contextMenuStrip1.Bounds;
}
else
{
contextMenuStrip1.Bounds = new Rectangle(new Point(rc.X, rc.Y - diff), rc.Size);
lastBounds = contextMenuStrip1.Bounds;
}
}