Come fare un ToolStripComboBox per riempire tutto lo spazio disponibile su un ToolStrip?
-
03-10-2019 - |
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.
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.