0

我有一个顶部有 MenuStrip 的程序,它目前有 4 个项目。我实际上要做的是确保如果用户缩小宽度,所有这 4 个菜单项都是可见的。

我最初的尝试是通过简单地抓取项目集合然后抓取条带上最后一个项目的边界来获取 MenuStrip 上的项目总数。检索到 bounds 变量后,我会快速计算 bounds.x + bounds.width 以确保 form.width 不小于该值,如果是,它会调整大小。所有这些都发生在表单的 ResizeEnd 事件中。

private void F_Main_ResizeEnd(object sender, EventArgs e)
    {
        ToolStripItemCollection t_col = menuStrip1.Items;
        int _howMany = t_col.Count;
        var mi_bounds = t_col[_howMany - 1].Bounds;
        if (this.Width < (mi_bounds.X + mi_bounds.Width))
           this.Width = (mi_bounds.X + mi_bounds.Width);
    }

现在,代码似乎大部分时间都可以工作。我发现如果我缩小表格,使第二个或第三个项目消失,它会调整得太薄,使第四个菜单不可见。那时,有趣的是,如果我只是单击表单的右边缘——就好像我要调整大小但不移动表单一样,它会恢复到正确的宽度并显示所有 4 个菜单项。

我发现toolstripmenuitem 的bounds 属性发生了变化,当我开始调整所有4 个显示的大小时,它的值是{a},而当我只显示3 个时,它的值是{b}。

我现在正试图找出一种更可靠的方法来确保我的所有菜单项都是可见的,并且表单的大小会调整到适当的宽度。

抱歉,如果这不能正确解释它,因为这对我来说是一个奇怪的问题。

4

1 回答 1

0

“我现在正试图找出一种更可靠的方法来确保我的所有菜单项都是可见的,并且表单的大小会调整到适当的宽度。”

使用调整大小事件来防止表单太小是一种笨拙的方法。

我强烈建议您设置表单最小宽度和高度属性。

编辑:

我建议在创建菜单和/或添加新菜单后在运行时设置这些属性,然后执行以下(伪)代码:

ToolStripItemCollection t_col = menuStrip1.Items;
int _howMany = t_col.Count;
var mi_bounds = t_col[_howMany - 1].Bounds;
if (this.Width < (mi_bounds.X + mi_bounds.Width))
{
var minimumFormHeight = 20;
this.MinimumSize = new Size((mi_bounds.X + mi_bounds.Width), minimumFormHeight);
}
于 2012-06-30T06:28:34.153 回答