Domanda

A ToolStripComboBox viene posto dopo un ToolStripButton ed è folowed da un'altra, che è allineato a destra. Come faccio a miglior set up della ToolStripComboBox per regolare sempre la sua lunghezza per riempire tutto lo spazio disponibile tra la precedente e le ToolStripButtons folowing?

In passato ho usato per gestire un evento di ridimensionamento genitore, calcolare la nuova lunghezza di serie sulla base di elementi vicini coordinate e impostare la nuova dimensione. Ma ora, mentre sto sviluppando una nuova applicazione, mi chiedo se non c'è modo migliore.

È stato utile?

Soluzione

Non c'è alcuna opzione layout automatico per questo. Ma si può facilmente farlo implementando l'evento ToolStrip.Resize. Questo ha funzionato bene:

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

Assicurarsi di impostare la proprietà Dimensioni automatiche del TSCB su False o non funzionerà.

Altri suggerimenti

Io uso il seguente con grande successo:

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

Il codice di cui sopra non soffre del problema di controllo 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);

Ora casella combinata attraccherà riempimento correttamente. Set colonna o riga lasso di conseguenza.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top