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

工作正常!

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

如何做到这一点?

最佳答案

仍不确定是否有“适当的”内置方法来执行此操作...

同时,这是一种黑客,只要大小改变,它就会更改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;
        }
    }

关于c# - 动态过滤上下文菜单C#并调整其大小,同时使其重力降至底部,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16320338/

10-12 12:37
查看更多