从组合框中获取所选值

本文关键字:获取 组合 | 更新日期: 2023-09-27 17:50:45

我已经阅读了很多关于这个主题的文章。我尝试了很多变化,但出于某种原因,我不能让这个工作。问题是:我有一个组合框,其中填充了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;
    }

从组合框中获取所选值

我认为ComboBox的这部分文档可能会有所帮助:

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

当组合框失去焦点时,选择点移动到文本的开头和任何选中的文本变为未选中。在在本例中,获取SelectedText属性获取一个空字符串,设置SelectedText属性添加指定的值到正文开头

当组合框获得焦点时,控件中的全文为自动选择。如果调用控件的Focus方法来设置输入焦点后,无论全文是否被选中控制已经有了焦点。选项中选择一项时下拉列表或使用"向上箭头"answers"向下箭头"键,显示文本因为新项目是自动选择的。然而,如果你试图得到SelectedIndexChanged或中的SelectedText值SelectedValueChanged事件处理程序,该属性返回空字符串。这是因为,在这些事件发生时,先前的SelectedText值已被清除,新值尚未被清除集。来检索SelectedIndexChanged或SelectedValueChanged事件处理程序,使用SelectedItem属性相反。

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

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

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