ToolStripMenuItem.Bounds返回不同的值而没有控制移动

时间:2012-06-30 06:23:08

标签: winforms visual-studio-2010 c#-4.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个菜单项。

我发现,当我开始使用所有4个显示进行调整时,toolstripmenuitem的bounds属性发生了变化,值{a},当只有3个显示时,值为{b}。

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

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

1 个答案:

答案 0 :(得分:0)

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

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

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

编辑:

我建议在创建菜单之后在运行时设置这些属性&amp; /或在添加新菜单之后执行此(伪)代码:

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);
}