从组合框C#中获取所选值

时间:2013-01-03 15:38:02

标签: c#

我已经阅读了很多关于这个主题的主题。我尝试过很多变化,但出于某种原因,我无法让它发挥作用。这是问题所在:我有一个组合框,其中填充了Excel工作簿中的工作表名称。 (我将包含该代码,以防问题出现)当我尝试获取所选文本值时,我什么也得不到。我做错了什么?

    /********************************************************************************
     * The following code takes in an excel filename and populates a combobox based 
     * on the excel tab names.
     ********************************************************************************/
    private void GetExcelSheetNames(string excelFile)
    {
        _Application xlApp;
        Workbook xlTemplateWB;

        xlApp = new ApplicationClass();

        xlTemplateWB = xlApp.Workbooks.Open(Elmnt.getDBPath() + TEMPLATENAME, 0, true,
            5, "", "", false, XlPlatform.xlWindows, "", true, false, 0, true, false, false);

        foreach (Worksheet temp in xlTemplateWB.Worksheets)
        {
            cboBenchSheets.Items.Add(temp.Name);
        }

        xlTemplateWB.Close(true, Missing.Value, Missing.Value);
        xlApp.Quit();
    }

    /********************************************************************************
     * This returns the selected item in the cboBenchSheets combo box
     ********************************************************************************/
    public String getSelection()
    {
        String selected;
        selected = cboBenchSheets.Text;                                         //Returns nothing
        selected = cboBenchSheets.SelectedText;                                 //Returns nothing
        selected = cboBenchSheets.SelectedValue.ToString();                     //Returns nothing
        selected = cboBenchSheets.GetItemText(cboBenchSheets.SelectedIndex);    //Returns -1

        return selected;
    }

2 个答案:

答案 0 :(得分:2)

我认为documentation for ComboBox的这一部分可能有所帮助:

  

您可以使用SelectedText属性来检索或更改   当前在ComboBox控件中选择的文本。但是,你应该   意识到选择可以因用户而自动改变   相互作用。例如,如果您在a中检索SelectedText值   按钮单击事件处理程序,该值将为空字符串。这是   因为当输入焦点时,选择会自动清除   从组合框移动到按钮。

     

当组合框失去焦点时,选择点移动到   文本的开头和任何选定的文本都将取消选中。在   在这种情况下,获取SelectedText属性将检索为空   字符串,并设置SelectedText属性添加指定的值   到文本的开头。

     

当组合框获得焦点时,控件中的全文为   自动选择。如果调用控件的Focus方法进行设置   输入焦点,无论是否选择全文   控制已经有了焦点。当用户从中选择一个项目时   下拉列表或使用向上箭头键和向下箭头键,文本   自动选择新项目。但是,如果你试图获得   SelectedIndexChanged或中的SelectedText值   SelectedValueChanged事件处理程序,该属性返回一个空   串。这是因为,在这些事件发生时,以前   SelectedText值已被清除,新值尚未被删除   组。要检索SelectedIndexChanged或中的当前值   SelectedValueChanged事件处理程序,使用SelectedItem属性   代替。

答案 1 :(得分:1)

如果使用项目填充组合框并且不对其执行任何其他操作,则在用户或代码显式设置选定项目之前,它没有选定项目。我知道这看起来很奇怪,因为默认情况下组合框似乎选择了第一个项目,但这就是它的方式。

尝试在填充组合框项目集合的for循环后手动将所选项目设置为第一项。

foreach (Worksheet temp in xlTemplateWB.Worksheets)
{
    cboBenchSheets.Items.Add(temp.Name);
}

cboBenchSheets.SelectedIndex = 0;