2

我有一个包含 26 个项目和一个附加ToolStripTextBox菜单项的系统托盘上下文菜单。ToolStripMenuItem Visible property当用户在过滤器文本框中输入文本时,它会在用户键入时不断过滤菜单项,并通过将 设置为动态隐藏类别false

它正在工作!

问题是当它被过滤时,上下文菜单的高度从底部到顶部变得更短。菜单的原点是右上角,导致它向上收缩。由于它是与系统托盘相关的上下文菜单,因此我希望它会向下收缩(底部重力)。

如何做到这一点?

4

1 回答 1

1

仍然不确定是否有“正确的”内置方法可以做到这一点......

同时,这里有一个 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;
        }
    }
于 2013-05-01T21:05:06.910 回答