Winforms ToolStripMenuItem.Bounds在不移动控件的情况下返回不同的值

Winforms ToolStripMenuItem.Bounds在不移动控件的情况下返回不同的值,winforms,visual-studio-2010,c#-4.0,Winforms,Visual Studio 2010,C# 4.0,我有一个顶部有菜单的程序,它目前有4个项目。基本上,我要做的是确保如果用户缩小宽度,所有4个菜单项都是可见的 我最初的尝试是通过简单地抓取项目集合,然后抓取条带上最后一个项目的边界,来获取MenuStrip上的项目总数。检索bounds变量后,我会快速计算bounds.x+bounds.width,以确保form.width不小于该值,如果是,则会调整其大小。所有这些都发生在表单的ResizeEnd事件中 private void F_Main_ResizeEnd(object sender,

我有一个顶部有菜单的程序,它目前有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);
    }
private void F_Main_ResizeEnd(对象发送方,事件参数e)
{
ToolStripItemCollection t_col=menuStrip1.Items;
int _howny=t列计数;
var mi_bounds=t_col[_howMany-1]。边界;
if(this.Width<(mi_bounds.X+mi_bounds.Width))
this.Width=(mi_-bounds.X+mi_-bounds.Width);
}
现在,大多数情况下,代码似乎都起作用了。我发现,如果我缩小表单,使第二个或第三个项目消失,它的大小太小,第四个菜单不可见。在这一点上,非常有趣的是,如果我简单地单击表单的右边缘,就像我将调整表单的大小但不移动表单一样,它将恢复到正确的宽度并显示所有4个菜单项

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

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

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

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

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

我强烈建议您设置窗体的最小宽度和高度属性。

编辑:

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

ToolStripItemCollection t\u col=menuStrip1.Items;
int _howny=t列计数;
var mi_bounds=t_col[_howMany-1]。边界;
if(this.Width<(mi_bounds.X+mi_bounds.Width))
{
var minimumFormHeight=20;
this.MinimumSize=新大小((mi_-bounds.X+mi_-bounds.Width),minimumFormHeight);
}

这适用于我当前的项目,但如果在使用动态添加的菜单项时,有一段时间我想做这类事情,我需要的不仅仅是最小宽度或高度属性。
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);
}