Как сделать ToolStripComboBox для заполнения всего пространства, доступного на ToolStrip?

ToolStripComboBox размещается после ToolStripButton и сопровождается другим, который выровнен по правому краю. Как я лучше всего создаю ToolStripComboBox, чтобы всегда скорректировать его длину для заполнения всего пространства, доступного между предыдущим и folowing ToolStripButtons?

В прошлом я раньше обрабатывал родителя, изменяют размер события, вычисляют новую длину для установки на основе соседних координат элементов и установки нового размера. Но теперь, когда я разрабатываю новое приложение, интересно, нет ли никакого лучшего пути.

5
задан Ivan 4 May 2010 в 21:26
поделиться

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

Обязательно установите для свойства AutoResize TSCB значение False, иначе это не сработает.

2
ответ дан 14 December 2019 в 04:32
поделиться

Я с большим успехом использую следующее:

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

Приведенный выше код не страдает от проблемы управления исчезновением.

5
ответ дан 14 December 2019 в 04:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: