在ComboBox上设置SelectedIndex

时间:2012-03-27 20:46:17

标签: c# winforms

我处于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 :(得分:0)

你的代码是完全正确的,但你脑子里只有一个错误。考虑一下,在初始化控件后,您正在将项加载到ComboBox中。此时控件没有项目,因此不会自动设置属性“文本”。

您必须区分SelectedIndex(项目列表中项目的索引)和Text(文本),它们是ComboBox中显示的文本。因此,请考虑何时以及如何设置ComboBox的Text-property。

在更改后,始终将Text-property设置为item-list的第一个值。

问候,

答案 1 :(得分:0)

马里奥的答案也可以解释为:

在加载后放置代码(例如:在显示的事件中),这样控件被初始化并有项目。