Как мне ждать создания дескриптора для comboBox, чтобы я мог изменить selectedIndex? - PullRequest
0 голосов
/ 30 мая 2018

Я застрял в этой проблеме с ComboBox.

Мне нужно создать его программно, установить DataSource, добавить его в мою форму и затем изменить SelectedIndex.Я делаю это так:

rectangle = new Rectangle(x, y, width, height)
ComboBox cb = new ComboBox
                        {
                            Size = Rectangle.Size,
                            Location = Rectangle.Location,
                            DataSource = new List<string>(comboBoxDataSource),
                        };
Form1.Controls.Add(cb);
cb.SelectedIndex = index;

Когда программа доходит до этой последней строки, я выдаю сообщение об ошибке:

System.ArgumentOutOfRangeException: 'InvalidArgument = Value of«4» недопустимо для «SelectedIndex».Имя параметра: SelectedIndex '

Когда происходит сбой кода, я вижу, что ComboBox содержит 6 элементов, поэтому не должен ли индекс' 4 'быть действительным на этом этапе?

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

Есть ли кто-нибудь, кто сталкивался с подобной проблемой или знает решение?

Ответы [ 2 ]

0 голосов
/ 30 мая 2018

Добавьте BindingSource и установите его DataSource.Добавьте контекст связывания в комбинированный список и после этого установите комбинированный список DataSource на BindingSource.DataSource.Смотрите ниже:

string[] dataSource = new string[30];
for (int i = 0; i < 30; i++) {
    dataSource[i] = "test " + i.ToString();
}
ComboBox cb = new ComboBox();
cb.Size = new Size(121, 21);
cb.Location = new Point(55, 74);
BindingSource bS = new BindingSource();
cb.BindingContext = new BindingContext();
bS.DataSource = dataSource;
cb.DataSource = bS.DataSource;
cb.SelectedIndex = 4; // shoul and does display test 3
this.Controls.Add(cb);
0 голосов
/ 30 мая 2018

Свяжите источник данных после добавления поля со списком в элемент управления.Затем вы можете выбрать элемент.

        var dataSource = new List<string> { "one", "two", "three", "four", "five" };

        var rectangle = new Rectangle(10, 10, 100, 40);
        ComboBox cb = new ComboBox
        {
            Location = rectangle.Location,
            Size = rectangle.Size,
        };
        this.Controls.Add(cb);

        cb.DataSource = new List<string>(dataSource);
        cb.SelectedIndex = 3;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...