ToolStripComboBox размещается после ToolStripButton и сопровождается другим, который выровнен по правому краю. Как я лучше всего создаю ToolStripComboBox, чтобы всегда скорректировать его длину для заполнения всего пространства, доступного между предыдущим и folowing ToolStripButtons?
В прошлом я раньше обрабатывал родителя, изменяют размер события, вычисляют новую длину для установки на основе соседних координат элементов и установки нового размера. Но теперь, когда я разрабатываю новое приложение, интересно, нет ли никакого лучшего пути.
Для этого нет опции автоматического макета. Но вы можете легко это сделать, реализовав событие 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);
}
Обязательно установите для свойства AutoResize TSCB значение False, иначе это не сработает.
Я с большим успехом использую следующее:
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);
}
Приведенный выше код не страдает от проблемы управления исчезновением.