Добавление элементов управления в Panel внутри цикла for добавляет только первую итерацию элемента управления - PullRequest
0 голосов
/ 29 октября 2018

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

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

Также мне известен еще один вопрос с этой проблемой, но ему шесть лет, и решение у меня не сработало.

Panel pnl заполняется Panel, содержащей метку и текстовое поле, которое уже находится в форме. эта панель затем удаляется из элементов управления и pnl остается

РЕДАКТИРОВАТЬ ДЛЯ УТОЧНЕНИЯ: Код будет циклически повторяться несколько раз, но когда он достигнет panel1.Controls.AddRange(controls);, общее количество элементов panel1.controls равно 1, независимо от длины элементов управления массивом

Panel pnl;
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        Control[] controls = new Control[8];
        for (int i = 0; i < int.Parse(ddlPlayers.SelectedItem.ToString()); i++)
        {
            pnl.Name = "pnl " + i.ToString();
            if (i!= 0)
                pnl.Location = new Point(pnl.Location.X, controls[i - 1].Location.Y + Height);
            pnl.Show();
            controls[i] = pnl;
        }
        panel1.Controls.AddRange(controls);
    }

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

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

0 голосов
/ 29 октября 2018

проверьте эту строку ---> int.Parse(ddlPlayers.SelectedItem.ToString())

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