获取ComboBox的当前索引?

时间:2011-09-07 22:41:48

标签: c# .net winforms indexing combobox

假设我有一个包含这些值的ComboBox:

Black
Red
Blue

我目前已选择Red。如果用户然后点击退格并点击进入,我将捕获ComboBox的KeyDown事件。

在这种情况下,我想从ComboBox中的项目列表中删除Red。

但是,因为在调用KeyDown时,ComboBox的文本为空,所以SelectedIndex为-1。

目前我的解决方法如下:

private void myComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
    currentMyComboBoxIndex = myComboBox.FindStringExact(myComboBox.Text);
}

哪个有效..但我只是想知道是否有更好的方法。看起来这种方式可能会以某种方式破坏,看起来有点混乱。是否无法获取ComboBox的当前索引而无需使用成员变量跟踪它并在索引更改时更新它?

谢谢。

3 个答案:

答案 0 :(得分:8)

你做的方式很好。您必须将所选索引保留在内存中,因为它在删除文本时返回-1作为SelectedIndex。你也可以用这种方式获取索引。

private void myComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
    currentMyComboBoxIndex = myComboBox.SelectedIndex;
}

答案 1 :(得分:2)

您可以使用以下代码将组合框的选定项目作为对象:

ComboBox comboBox = new ComboBox();
// Initialize combo box
comboBox.Items.Add("Black");
comboBox.Items.Add("Red");
comboBox.Items.Add("Blue");
// Get selected one
string current = (string)comboBox.SelectedItem;

此外,可以使用以下代码行之一轻松删除所选项目:

// By item
comboBox.Items.Remove(comboBox.SelectedItem);
// By Index
comboBox.Items.RemoveAt(comboBox.SelectedIndex);

答案 2 :(得分:0)

没有内置函数来获取给定值的索引,但您可以通过此函数找到索引。

<强>用法

int cmbindex  = CmbIdxFindByValue("YourValue", cmbYourComboBox);

<强>功能

private int CmbIdxFindByValue(string text, ComboBox cmbCd)
    {
        int c = 0; ;
        DataTable dtx = (DataTable)cmbCd.DataSource;
        if (dtx != null)
        {
            foreach (DataRow dx in dtx.Rows)
            {
                if (dx[cmbCd.ValueMember.ToString()].ToString() == text)
                    return c;
                c++;
            }
            return -1;
        }else
            return -1;
    }