Пользовательский элемент управления не добавляется в TableLayoutPanel во время выполнения - PullRequest
0 голосов
/ 19 сентября 2019

У меня есть TableLayoutPanel на форме, которая имеет 8 столбцов и 8 строк.Я пытаюсь заполнить эту таблицу из списка пользовательских элементов управления, каждый из которых содержит три метки.Когда я запускаю приложение, я вижу, что оно заполнено, но, глядя на фактическую форму, оно пустое.

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

Этот код выполняется в методе Load и генерирует список GridSquareModel, который используется для заполнения пользовательского элемента управления.Каждая модель имеет позиции X и Y, которые относятся к их ячейке на панели таблицы.

var startup = new StartupForm();
if (startup.ShowDialog() == DialogResult.OK)
{
    var grid = new List<GridSquareModel>();
    for (int i = 0; i < 64; i++)
    {
        Position pos = new Position();
        pos.X = i % 8;
        pos.Y = i / 8;
        grid.Add(new GridSquareModel(pos));
    }

    RenderGrid(grid);
}
else
{
    Application.Exit();
}

Этот метод генерирует GridSquareControl для каждого GridSquareModel в списке.Значения X и Y в позиции определяют, к какой ячейке они добавляются.

private void RenderGrid(List<GridSquareModel> grid)
{
    UIGrid.Clear();
    GridTable.Controls.Clear();

    foreach (var item in grid)
    {
        var control = new GridSquareControl(item)
        {
            Dock = DockStyle.Fill
        };
        GridTable.Controls.Add(control, item.Position.X, item.Position.Y);
        //GridTable.Controls.Add(new Label
        //{
        //    Text = "TEST"
        //}, item.Position.X + 1, item.Position.Y + 1);
    }

}

Я прокомментировал мою попытку заменить GridSquareModel на Label, которая сработала.Это должно привести к созданию таблицы, содержащей 64 элемента управления, но после загрузки таблица будет пустой.

1 Ответ

0 голосов
/ 20 сентября 2019

Я идиот.Я создал конструктор для GridSquareControl, но он не включал метод InitializeComponent, поэтому, очевидно, он не отображался.Теперь все работает как положено.

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