如何从组合框 C# 中的选定值获取所选索引

本文关键字:获取 索引 组合 | 更新日期: 2023-09-27 18:36:02

是否有任何内置方法可以从 ComboBox 控件 C# 中的选定值获取所选索引。如果没有,我该如何构建自己的

提前致谢

如何从组合框 C# 中的选定值获取所选索引

我认为您正在寻找SelectedIndex属性。

int index = comboref.SelectedIndex

当您查找特定值的索引而不是所选值的索引时,您可以这样做

int index = comboref.Items.IndexOf("string");

它会告诉你哪个索引在组合框中有"字符串"

您可以使用

combobox1.Items.IndexOf("string")它将返回指定项集合中的索引

或者使用 combobox1FindString("string")findExactString("string") 这将返回指定项的第一个匹配项。您还可以为其指定与startIndex对应的第二个参数,以从该索引开始搜索。

我希望我回答了你的问题!

OP:我想要的是从值中获取索引,即:int seletedIndex = comboBox.getIndexFromKnownSelectedValue(value)

按值获取

项并按值获取索引

您需要扫描项目,并为每个项目获取基于SelectedValue字段的值,然后获取项目的索引。为此,可以使用此 GetItemValue 扩展方法,并通过以下方式获取项和索引:

//Load sample data
private void Form1_Load(object sender, EventArgs e)
{
    comboBox1.DataSource = Enumerable.Range(1, 5)
        .Select(x => new { Name = $"Product {x}", Id = x }).ToList();
    comboBox1.DisplayMember = "Name";
    comboBox1.ValueMember = "Id";
}
private void button1_Click(object sender, EventArgs e)
{
    //Knows value
    var value = 3;
    //Find item based on value
    var item = comboBox1.Items.Cast<Object>()
        .Where(x => comboBox1.GetItemValue(x).Equals(value))
        .FirstOrDefault();
    //Find index 
    var index = comboBox1.Items.IndexOf(item);
    //Set selected index
    comboBox1.SelectedIndex = index;
}

否,没有任何内置方法可用于从 ComboBox 控件 C# 中的选定值获取所选索引。但是您可以创建自己的函数来获得相同的功能。

用法:

int index = CmbIdxFindByValue("YourValue", YourComboBox);

功能:

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;
}