2012-03-27 82 views
1

我在開始的C#類,我無法弄清楚爲什麼在下面的代碼運行後,選定的索引仍然是-1(即加載時的組合框爲空)。應該默認爲的selectedIndex = 1:在ComboBox上設置SelectedIndex

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

這是一個課堂作業,所以我不允許使用設計,而不是鏈接的方法來事件的其他設置任何東西。除了組合框的默認值之外,一切正常工作。

+0

你說「它應該默認爲selectedIndex 1」,但是您在代碼中將組合框SelectedIndex設置爲0。 – 2012-03-27 21:05:08

+0

他做得很對,因爲0是列表中的第一個元素。 – 2012-03-27 21:21:15

+0

我知道。寫的問題表明她希望SelectedIndex爲1的項目,而不是列表中的第一個元素,這將是索引0. – 2012-03-28 01:25:56

回答

0

您的代碼是完全正確的,但您的頭腦中有一個單一的錯誤。考慮一下,在初始化控件之後,您正在將項目加載到ComboBox中。此時控件沒有項目,因此屬性「文本」不會自動設置。

您必須在SelectedIndex(項目列表中項目的索引)和ComboBox中顯示的Text(文本)之間有所不同。所以想想你應該在什麼時候以及如何設置ComboBox的Text-property。

總是將Text-property設置爲項目列表的第一個值,然後再對其進行更改。

問候,

+0

感謝您的回覆!我在表單加載方法的底部添加了這一行(cboConversion.Text = conversionChoices [0,0] +「to」+ conversionChoices [0,1];),它現在正在工作。我感謝你不只是給我代碼,而且還解釋了爲什麼,因爲我還在學習,這真的更有幫助。 – 2012-03-28 00:40:29

+0

你應該接受答案 – 2012-11-19 14:49:15

+0

嗨!如果我的答案解決了您的問題,請接受它;) – 2012-12-01 00:32:12

0

馬里奧的回答也可以解釋爲:

把你的代碼加載(例如:在顯示事件)之後,以這種方式控制被初始化,並具有項目。

相關問題