Pregunta

A ToolStripComboBox se coloca después de una ToolStripButton y se folowed por otro, que está alineado a la derecha. ¿Cómo trato mejor juego hasta la ToolStripComboBox para ajustar siempre su longitud para llenar todo el espacio disponible entre el precedente y los ToolStripButtons folowing?

En el pasado he utilizado para manejar un evento de cambio de tamaño de los padres, el cálculo de la longitud del nuevo conjunto de coordenadas basado en la vecina elementos y establecer el nuevo tamaño. Pero ahora, como estoy desarrollando una nueva aplicación, me pregunto si no hay una manera mejor.

¿Fue útil?

Solución

No hay opción de diseño automático para esto. Pero se puede hacer fácilmente mediante la implementación del evento ToolStrip.Resize. Esto funcionó bien:

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

Asegúrese de ajustar la propiedad AutoResize del TSCB en False o no va a funcionar.

Otros consejos

Yo uso el siguiente con gran éxito:

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

El código anterior no sufren del problema de control Disapearing.

ToolStrip ts = new ToolStrip();

ToolStripComboBox comboBox = new TooLStripComboBox();
comboBox.Dock = DockStyle.Fill;

ts.LayoutStyle = ToolStripLayoutStyle.Table;
((TableLayoutSettings)ts.LayoutSettings).ColumnCount = 1;
((TableLayoutSettings)ts.LayoutSettings).RowCount = 1;
((TableLayoutSettings)ts.LayoutSettings).SetColumnSpan(comboBox,1);

ts.Items.Add(comboBox);

Ahora el cuadro combinado se acoplará llenado correctamente. Columna conjunto o el intervalo de fila en consecuencia.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top