221

我有一个字符串“test1”,我的组合框包含test1test2test3。如何将所选项目设置为“test1”?也就是说,如何将我的字符串与组合框项目之一匹配?

我正在考虑下面的行,但这不起作用。

comboBox1.SelectedText = "test1"; 
4

27 回答 27

306

这应该可以解决问题:

Combox1.SelectedIndex = Combox1.FindStringExact("test1")
于 2009-01-16T11:08:19.173 回答
211

您是否尝试过Text属性?这个对我有用。

ComboBox1.Text = "test1";

SelectedText 属性用于组合框文本框部分中可编辑文本的选定部分。

于 2009-01-16T23:48:35.907 回答
51

假设您的组合框不是数据绑定的,您需要在表单的“items”集合中找到对象的索引,然后将“selectedindex”属性设置为适当的索引。

comboBox1.SelectedIndex = comboBox1.Items.IndexOf("test1");

请记住,如果未找到该项目,IndexOf 函数可能会引发参数异常。

于 2009-01-16T10:57:52.860 回答
42

如果您的 ComboBox 中的项目是字符串,您可以尝试:

comboBox1.SelectedItem = "test1";
于 2009-01-16T10:52:24.510 回答
14
ComboBox1.SelectedIndex= ComboBox1.FindString("Matching String");

在 windows 窗体中试试这个。

于 2018-10-18T07:52:14.600 回答
12

对我来说,这只有效:

foreach (ComboBoxItem cbi in someComboBox.Items)
{
    if (cbi.Content as String == "sometextIntheComboBox")
    {
        someComboBox.SelectedItem = cbi;
        break;
    }
}

MOD:如果您在组合框中设置了自己的对象作为项目,则将 ComboBoxItem 替换为其中之一,例如:

foreach (Debitor d in debitorCombo.Items)
{
    if (d.Name == "Chuck Norris")
    {
        debitorCombo.SelectedItem = d;
        break;
    }
}
于 2010-07-09T09:07:07.997 回答
9

SelectedText 是在字符串编辑器中获取或设置组合框中所选项目的实际文本,如此处所述。如果您设置,这将无法编辑:

comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;

利用:

comboBox1.SelectedItem = "test1";

或者:

comboBox1.SelectedIndex = comboBox1.Items.IndexOf("test1");
于 2009-01-16T22:59:25.553 回答
9

我使用了扩展方法:

public static void SelectItemByValue(this ComboBox cbo, string value)
{
    for(int i=0; i < cbo.Items.Count; i++)
    {
        var prop = cbo.Items[i].GetType().GetProperty(cbo.ValueMember);
        if (prop!=null && prop.GetValue(cbo.Items[i], null).ToString() == value)
        {
             cbo.SelectedIndex = i;
             break;
        }
    } 
}

然后只需使用该方法:

ddl.SelectItemByValue(value);
于 2014-06-12T10:21:21.423 回答
5
comboBox1.SelectedItem.Text = "test1";
于 2011-04-21T10:56:56.297 回答
4

我已经用从数据库填充的 een DataTable 填充了我的 ComboBox。然后我设置了 DisplayMember 和 ValueMember。我使用此代码来设置所选项目。

foreach (DataRowView Row in ComboBox1.Items)
{
    if (Row["ColumnName"].ToString() == "Value") ComboBox1.SelectedItem = Row;
}
于 2011-05-05T11:17:40.017 回答
4

该解决方案基于MSDN,并进行了一些修改。

  • 它找到字符串的确切或部分并设置它。

    private int lastMatch = 0;
    private void textBoxSearch_TextChanged(object sender, EventArgs e)
    {
        // Set our intial index variable to -1.
        int x = 0;
        string match = textBoxSearch.Text;
        // If the search string is empty set to begining of textBox
        if (textBoxSearch.Text.Length != 0)
        {
            bool found = true;
            while (found)
            {
                if (comboBoxSelect.Items.Count == x)
                {
                    comboBoxSelect.SelectedIndex = lastMatch;
                    found = false;
                }
                else
                {
                    comboBoxSelect.SelectedIndex = x;
                    match = comboBoxSelect.SelectedValue.ToString();
                    if (match.Contains(textBoxSearch.Text))
                    {
                        lastMatch = x;
                        found = false;
                    }
                    x++;
                }
            }
        }
        else
            comboBoxSelect.SelectedIndex = 0;
    }
    

我希望我有所帮助!

于 2011-08-01T15:38:27.233 回答
4

假设 test1、test2、test3 属于 comboBox1 集合以下语句将起作用。

comboBox1.SelectedIndex = 0; 
于 2009-01-16T10:59:11.143 回答
1
  • 枚举组合框中的 ListItems
  • 获取相等的 listindex 设置组合框
  • 将 listindex 设置为找到的。

但是如果我作为代码审阅者看到这样的代码,我会建议重新考虑所有方法算法。

于 2009-01-16T10:53:47.813 回答
1

您在组合框中没有该属性。您有 SelectedItem 或 SelectedIndex。如果您有用于填充组合框的对象,则可以使用 SelectedItem。

如果没有,您可以获取项目集合(属性项目)并对其进行迭代,直到您获得所需的值并将其与其他属性一起使用。

希望能帮助到你。

于 2009-01-16T10:56:15.970 回答
1
_cmbTemplates.SelectedText = "test1"

或者可能

_cmbTemplates.SelectedItem= _cmbTemplates.Items.Equals("test1");
于 2009-01-16T11:01:37.470 回答
1

在组合框(包含 MyObject 列表)中找到 mySecondObject(MyObject 类型)并选择该项目:

foreach (MyObject item in comboBox.Items)
{
   if (item.NameOrID == mySecondObject.NameOrID)
    {
        comboBox.SelectedItem = item;
        break;
    }
}
于 2019-05-22T09:34:39.717 回答
1

我使用KeyValuePair 进行 ComboBox 数据绑定,我想按查找项目,所以这在我的情况下有效:

comboBox.SelectedItem = comboBox.Items.Cast<KeyValuePair<string,string>>().First(item=> item.Value == "value to match");
于 2015-12-07T07:46:40.683 回答
0
combo.Items.FindByValue("1").Selected = true;
于 2011-11-01T22:41:02.590 回答
0
  ListItem li = DropDownList.Items.FindByValue("13001");
  DropDownList.SelectedIndex = ddlCostCenter.Items.IndexOf(li);

对于您的情况,您可以使用

DropDownList.Items.FindByText("Text");
于 2011-08-03T11:52:16.367 回答
0

在 ComboBox 有父项之前,所有设置 ComboBox 项的方法、技巧和代码行都将不起作用。

于 2016-04-02T08:31:16.127 回答
0

如果您通过数据集绑定数据源,那么您应该使用“SelectedValue”

cmbCategoryList.SelectedValue = (int)dsLookUp.Tables[0].Select("WHERE PRODUCTCATEGORYID = 1")[0]["ID"];
于 2022-02-13T16:11:47.397 回答
0

我知道这不是 OP 所要求的,但可能是他们不知道吗?这里已经有几个答案,所以即使这很长,我认为它可能对社区有用。

使用枚举填充组合框允许轻松使用 SelectedItem 方法以编程方式选择组合框中的项目以及从组合框中加载和读取。

public enum Tests
    {
        Test1,
        Test2,
        Test3,
        None
    }

// Fill up combobox with all the items in the Tests enum
    foreach (var test in Enum.GetNames(typeof(Tests)))
    {
        cmbTests.Items.Add(test);
    }

    // Select combobox item programmatically
    cmbTests.SelectedItem = Tests.None.ToString();

如果您双击组合框,您可以处理选定的索引更改事件:

private void cmbTests_SelectedIndexChanged(object sender, EventArgs e)
{
    if (!Enum.TryParse(cmbTests.Text, out Tests theTest))
    {
        MessageBox.Show($"Unable to convert {cmbTests.Text} to a valid member of the Tests enum");
        return;
    }

    switch (theTest)
    {
        case Tests.Test1:
            MessageBox.Show("Running Test 1");
            break;

        case Tests.Test2:
            MessageBox.Show("Running Test 2");
            break;

        case Tests.Test3:
            MessageBox.Show("Running Test 3");
            break;

        case Tests.None:

            // Do nothing

            break;

        default:
            MessageBox.Show($"No support for test {theTest}.  Please add");
            return;
    }
}

然后,您可以从按钮单击处理程序事件运行测试:

 private void btnRunTest1_Click(object sender, EventArgs e)
    {
        cmbTests.SelectedItem = Tests.Test1.ToString();
    }
于 2021-07-22T13:42:32.760 回答
0

我创建了一个函数,它将返回值的索引

        public static int SelectByValue(ComboBox comboBox, string value)
        {
            int i = 0;
            for (i = 0; i <= comboBox.Items.Count - 1; i++)
            {
                DataRowView cb;
                cb = (DataRowView)comboBox.Items[i];
                if (cb.Row.ItemArray[0].ToString() == value)// Change the 0 index if your want to Select by Text as 1 Index
                {
                    return i;
                }
            }
            return -1;
        }
于 2016-12-28T18:41:50.543 回答
0

这对我有用.....

comboBox.DataSource.To<DataTable>().Select(" valueMember = '" + valueToBeSelected + "'")[0]["DislplayMember"];
于 2017-11-16T09:09:01.190 回答
-1

你可以说comboBox1.Text = comboBox1.Items[0].ToString();

于 2017-06-13T06:22:10.057 回答
-2

请尝试这种方式,它对我有用:

Combobox1.items[Combobox1.selectedIndex] = "replaced text";
于 2011-01-07T09:12:55.913 回答
-3

它应该工作

Yourcomboboxname.setselecteditem("yourstring");

如果你想设置数据库字符串使用这个

Comboboxname.setselecteditem(ps.get string("databasestring"));
于 2016-02-21T16:53:12.797 回答