2012-03-27 3 views
1

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

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 + ":"; 
    } 

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

+0

Вы говорите: «Это должно быть значение по умолчанию для selectedIndex 1», но вы устанавливаете в выпадающем списке SelectedIndex значение 0. –

+0

Он сделал это правильно, потому что 0 является первым элементом списка. –

+0

Я знаю это. Вопрос в письменной форме говорит, что она хочет элемент в SelectedIndex 1, а не первый элемент в списке, который будет индексом 0. –

ответ

0

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

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

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

Привет,

+0

Спасибо за ваш ответ! Я добавил эту строку (cboConversion.Text = conversionChoices [0, 0] + "в" + conversionChoices [0, 1];) в нижней части метода загрузки формы и теперь работает. Я ценю, что вы не просто даете мне код, а объясняете, почему, что действительно полезно, поскольку я все еще участвую. –

+0

вы должны принять ответ –

+0

привет! если мой ответ решает вашу проблему, пожалуйста, примите это;) –

0

ответ Марио может быть истолковано и как:

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

Смежные вопросы