如何使ToolStripComboBox填充ToolStrip上的所有可用空间?

Iva*_*van 5 c# toolstrip winforms toolstripcombobox

ToolStripComboBox放在ToolStripButton之后,后面是另一个右对齐的.如何最好地设置ToolStripComboBox以始终调整其长度以填充前面和下面的ToolStripButtons之间的所有可用空间?

在过去,我曾经处理父调整大小事件,根据相邻元素坐标计算要设置的新长度并设置新大小.但是现在,当我开发一个新的应用程序时,我想知道是否没有更好的方法.

Mar*_*tin 5

我使用以下内容取得了巨大成功:

private void toolStrip1_Layout(System.Object sender, System.Windows.Forms.LayoutEventArgs e)
{
    int width = toolStrip1.DisplayRectangle.Width;

    foreach (ToolStripItem tsi in toolStrip1.Items) {
        if (!(tsi == toolStripComboBox1)) {
            width -= tsi.Width;
            width -= tsi.Margin.Horizontal;
        }
    }

    toolStripComboBox1.Width = Math.Max(0, width - toolStripComboBox1.Margin.Horizontal);
}
Run Code Online (Sandbox Code Playgroud)

上面的代码没有遭受消失的控制问题.

  • 使用VS2010/.NET 4:如果我很快调整表单大小,我仍然会遇到消失的控件问题.但是通过在表单的resize事件处理程序中添加toolStrip1.PerformLayout()可以很容易地解决它. (2认同)

Han*_*ant 2

没有自动布局选项。但是您可以通过实现 ToolStrip.Resize 事件轻松地做到这一点。这效果很好:

    private void toolStrip1_Resize(object sender, EventArgs e) {
        toolStripComboBox1.Width = toolStripComboBox2.Bounds.Left - toolStripButton1.Bounds.Right - 4;
    }
    protected override void OnLoad(EventArgs e) {
        toolStrip1_Resize(this, e);
    }
Run Code Online (Sandbox Code Playgroud)

请务必将 TSCB 的 AutoResize 属性设置为 False,否则它将不起作用。