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

StackOverflow https://stackoverflow.com/questions/2769087

Вопрос

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

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

Это было полезно?

Решение

Для этого нет автоматического макета. Но вы можете легко сделать это, реализуя событие 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);
}

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

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

Теперь Combobox будет правильно заполнить. Установите колонну или строку промежуток соответственно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top