0

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

2 回答 2

2

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

您可以使用 SelectedText 属性来检索或更改 ComboBox 控件中当前选定的文本。但是,您应该知道,由于用户交互,选择可能会自动更改。例如,如果您在按钮 Click 事件处理程序中检索 SelectedText 值,则该值将是一个空字符串。这是因为当输入焦点从组合框移动到按钮时,选择会自动清除。

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

当组合框获得焦点时,将自动选择控件中的全文。如果调用控件的 Focus 方法设置输入焦点,则无论控件是否已经具有焦点,都会选择全文。当用户从下拉列表中选择一个项目或使用向上箭头和向下箭头键时,将自动选择新项目的文本。但是,如果您尝试在 SelectedIndexChanged 或 SelectedValueChanged 事件处理程序中获取 SelectedText 值,则该属性将返回一个空字符串。这是因为,在这些事件发生时,先前的 SelectedText 值已被清除,并且尚未设置新值。要检索 SelectedIndexChanged 或 SelectedValueChanged 事件处理程序中的当前值,请改用 SelectedItem 属性。

于 2013-01-03T15:48:29.067 回答
1

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

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

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

cboBenchSheets.SelectedIndex = 0;
于 2013-01-03T15:49:38.947 回答