Установка SelectedIndex на ComboBox - PullRequest
1 голос
/ 28 марта 2012

Я нахожусь в начальном классе C #, и у меня возникают проблемы с выяснением, почему после выполнения следующего кода выбранный индекс все еще равен -1 (т. Е. Поле со списком при загрузке пусто). По умолчанию должно быть выбрано selectedIndex = 1:

public string[,] GetArray()
    {
        //create array with conversion values
        string[,] conversionInfo = { {"Miles","Kilometers", "1.6093"},
                                     {"Kilometers","Miles", ".6214"},
                                     {"Feet","Meters", ".3048"},
                                     {"Meters","Feet","3.2808"},
                                     {"Inches","Centimeters", "2.54"},
                                     {"Centimeters","Inches",".3937"}};
        return conversionInfo;
    }

    private void Form_Load(object sender, EventArgs e)
    {
        //get array to use
        string[,] conversionChoices = GetArray();

        //load conversion combo box with values
        StringBuilder fillString = new StringBuilder();

        for (int i = 0; i < conversionChoices.GetLength(0); i++)
        {
            for (int j = 0; j < conversionChoices.GetLength(1) - 1; j++)
            {
                fillString.Append(conversionChoices[i, j]);

                if (j == 0)
                {
                    fillString.Append(" to ");
                }
            }
            cboConversion.Items.Add(fillString);
            fillString.Clear();
        }

        //set default selected value for combobox
        cboConversion.SelectedIndex = 0;

    }

    public void cboConversions_SelectedIndexChanged(object sender, EventArgs e)
    {
        LabelSet(cboConversion.SelectedIndex);
    }

    public void LabelSet(int selection)
    {

        //get array to use
        string[,] labelChoices = GetArray();

        //set labels to coorespond with selection
        string from = labelChoices[selection, 0];
        string to = labelChoices[selection, 1];
        lblFrom.Text = from + ":";
        lblTo.Text = to + ":";
    }

Это присвоение класса, поэтому я не могу устанавливать что-либо с помощью конструктора, кроме как связывать методы с событием. Все работает правильно, кроме стандартного для выпадающего списка.

Ответы [ 2 ]

0 голосов
/ 19 ноября 2012

ответ Марио можно также интерпретировать как:

поместите свой код после загрузки (пример: для показанного события), таким образом, элемент управления инициализируется и содержит элементы.

0 голосов
/ 28 марта 2012

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

Вы должны различаться между SelectedIndex, который является индексом элемента в списке элементов, и текстом, который является текстом, показанным в ComboBox.Так что подумайте, когда и как вы должны установить свойство Text в ComboBox.

Всегда устанавливайте свойство Text на первое значение вашего списка элементов после его изменения.

Привет,

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