Отрегулируйте свободное место на TableLayoutPanel - PullRequest
2 голосов
/ 29 апреля 2020

У меня есть TableLayoutPanel, где у меня есть ярлык и комбинированный список:

   var lblDesignGroup = new Label
            {
                Name = "lblDesignGroup",
                Text = "DesignGroup",
                Margin = new Padding(0, 50, 0, 0)
            };
            tlpCallLog.Controls.Add(lblDesignGroup, 0, 0);

            var cboDesignGroup = new ComboBox
            {
                Name = "cboDesignGroup",
                DataSource = designGroups,
                DisplayMember = "DesignGroupName",
                ValueMember = "DesignGroupId",
                Margin = new Padding(0, 50, 0, 0),
                DropDownStyle = ComboBoxStyle.DropDownList
            };

Как только я их создаю, я форматирую TableLayoutPanel как:

            tlpCallLog.ColumnStyles.Clear();
            for (int i = 0; i < tlpCallLog.ColumnCount; i++)
            {
                tlpCallLog.ColumnStyles.Add(new ColumnStyle(SizeType.AutoSize));
            }

            tlpCallLog.RowStyles.Clear();
            for (int i = 0; i < tlpCallLog.RowCount; i++)
            {
                tlpCallLog.RowStyles.Add(new RowStyle(SizeType.AutoSize));
            }
            tlpCallLog.CellBorderStyle = TableLayoutPanelCellBorderStyle.Single;

enter image description here

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

1 Ответ

2 голосов
/ 29 апреля 2020

Элемент управления Label автоматически изменяет размеры в макете по умолчанию (когда он является дочерним по отношению к форме, как стандартный сценарий, поскольку форма выполняет свой макет при инициализации). При создании таким образом свойство AutoSize устанавливается на true, поскольку это значение по умолчанию, но макет никогда не выполняется.
Когда вы явно устанавливаете AutoSize = true, макет выполняется.

Установите для TableLayoutPanel и метки значение AutoSize:

tlpCallLog.AutoSize = true;
tlpCallLog.RowStyles.Clear();
//[...]

var lblDesignGroup = new Label {
    AutoSize = true,
    Name = "lblDesignGroup",
    Text = "DesignGroup",
    Margin = new Padding(0, 53, 0, 0)
};
tlpCallLog.Controls.Add(lblDesignGroup, 0, 0);

var cboDesignGroup = new ComboBox {  
    //[...]
}

Я предлагаю установить метку Margin = new Padding(0, 53, 0, 0): на 3 пикселя вниз, чтобы выровнять ее по тексту ComboBox. Это допустимая мера с (почти) любым размером шрифта.

Еще одно предложение - установить [Form].AutoScaleMode = AutoScaleMode.Dpi.

TableLayoutPanel AutoSize

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...