如何使用C#在comboBox中设置所选项目以匹配我的字符串?


197

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

我在想下面的行,但这行不通。

comboBox1.SelectedText = "test1"; 

它如何运作?这行代码运行时会发生什么?
凯特·格雷戈里

@KateGregory只是将“ test1”字符串连接到现有文本
solujic's

如果您有办法知道项目值,则可以使用:comboBox1.SelectedValue = Value_of_your_string;。
塞萨尔·莱昂

SelectedText将“选定”文本更改为test1。如果未进行“选择”(标记文本),则文本将插入插入符号的位置。
AaA

Answers:


278

这应该可以解决问题:

Combox1.SelectedIndex = Combox1.FindStringExact("test1")

对我来说似乎是一个更好的答案,因为您有一个返回值,可以将临时变量保存在变量中,然后使用它来测试是否找到了想要的值。
阿谢尔·科斯塔斯·佩纳

如果combox1中有多个“ test1”值怎么办
thoitbk 2015年

@thoitbk-根据msdn.microsoft.com/en-us/library/…上的MSDN ,方法FindStringExact() “在组合框中找到与指定字符串匹配的第一项”。
dub stylee

207

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

ComboBox1.Text = "test1";

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


7
当然,这只是将文本设置在ComboBox的可编辑区域中,而不是从列表中选择相关项吗?如果列表项集合包含对象而不只是字符串,那么我怀疑这会选择适当的ListItem对象,而只是在ComboBox上设置Text属性?
TabbyCool 2010年

9
它的确设置了控件的SelectedValue属性
Henryk'3

真好 适用于字体大小,粗细和家族下拉菜单。类之间没有强制转换或转换。太容易了!
兰斯·克利夫兰

3
以防万一:仅在填充组合框后才能设置此参数。
安东尼·罗德里格斯

12
我的组合框的dropdownstyle是DropDownList,并且.Text =“ some text”不起作用。该解决方案对我来说效果很好:Combox1.SelectedIndex = Combox1.FindStringExact(“ test1”)
Mayank

48

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

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

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


1
记住它的SelectedINDEX不是SelectedITEM ...并且编译器不会抱怨,只是无法设置组合框值
Rob

您是否不喜欢不会抛出任何异常的逻辑错误,它们只是行不通...
Spence

这是在选择项目,但没有在组合框上调用onChange事件
2016年

39

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

comboBox1.SelectedItem = "test1";


保存了一天!所选项目必须与类型匹配-对我来说就是这样!我was之以鼻,为什么没有设置所选项目,即使该项目显然在那也是如此-原来是类型不匹配!
Sudhanshu Mishra

为了完整起见,具有上面链接的描述非常有用,特别是因为此答案执行其他答案(包括来自@norbertB的首选答案)建议的匹配检查: 当您将SelectedItem属性设置为对象时,ComboBox会尝试使该对象成为对象。列表中当前选择的一个。 如果在列表中找到该物体它被显示在组合框的编辑部分和SelectedIndex属性被设置为相应的索引。如果列表中不存在该对象,则SelectedIndex属性将保留其当前值。
DanG

10

对我而言,这仅适用于:

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

2
这对我有用,但是您需要注意ComboBox中的项目实际上是ComboBoxItems,因为也可以在其中放置其他项目。
Grant

这在WinRT 8.1中效果很好。实际上,我将顶级的foreach封装在了像dave在他的SelectItemByValue()解决方案中编写的扩展方法中,它确实是完美的解决方案。
Speednet 2015年

9

SelectedText是获取或设置字符串编辑所选项目的实际文本在下拉列表作为记录在这里。如果您设置以下内容,则该内容将不可编辑:

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

用:

comboBox1.SelectedItem = "test1";

要么:

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

1
如果Items为空,则comboBox1.Items.IndexOf ...可能引发NullReferenceException。
加里


7

我使用了扩展方法:

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

5
comboBox1.SelectedItem.Text = "test1";


4

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

  • 它查找字符串的精确值或PART并进行设置。

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

希望我能帮上忙!


3

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

foreach (DataRowView Row in ComboBox1.Items)
{
    if (Row["ColumnName"].ToString() == "Value") ComboBox1.SelectedItem = Row;
}

1

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

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

希望能帮助到你。


1
_cmbTemplates.SelectedText = "test1"

或许

_cmbTemplates.SelectedItem= _cmbTemplates.Items.Equals("test1");

使用此代码,您将布尔值分配给SelectedItem属性...恕我直言。
Frederik Gheysels,2009年

1
  • 枚举组合框中的ListItem
  • 获取相等的listindex集组合框
  • 将listindex设置为找到的索引。

但是,如果我将这样的代码视为代码审阅者,则建议重新考虑所有方法算法。


2
那为什么要提供答案呢?

1

我将KeyValuePair 用于ComboBox数据绑定,我想按查找项目,因此在我的情况下有效:

comboBox.SelectedItem = comboBox.Items.Cast<KeyValuePair<string,string>>().First(item=> item.Value == "value to match");

1

在组合框(包含MyObjects列表)中找到mySecondObject(类型为MyObject),然后选择以下项:

foreach (MyObject item in comboBox.Items)
{
   if (item.NameOrID == mySecondObject.NameOrID)
    {
        comboBox.SelectedItem = item;
        break;
    }
}

0
  ListItem li = DropDownList.Items.FindByValue("13001");
  DropDownList.SelectedIndex = ddlCostCenter.Items.IndexOf(li);

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

DropDownList.Items.FindByText("Text");

0
combo.Items.FindByValue("1").Selected = true;

3
如果找不到“ 1”,这也有可能引发异常。
加里

0

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


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

0

这对我有用.....

comboBox.DataSource.To<DataTable>().Select(" valueMember = '" + valueToBeSelected + "'")[0]["DislplayMember"];

1
尽管此代码可以回答问题,但最好解释一下如何解决问题并提供代码作为示例或参考。仅代码的答案可能会造成混乱,并且缺乏上下文。
罗伯特·哥伦比亚

谢谢你的建议!
Jaydeep Karena


-2

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

Combobox1.items[Combobox1.selectedIndex] = "replaced text";

您应该先检查selectedIndex不是-1,或更准确地说,它是> = 0和<.items.length。
加里

-3

它应该工作

Yourcomboboxname.setselecteditem("yourstring");

如果要设置数据库字符串,请使用此

Comboboxname.setselecteditem(ps.get string("databasestring"));
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.