¿Cómo configuro el elemento seleccionado en un cuadro combinado para que coincida con mi cadena usando C #?

197

Tengo una cadena "test1" y mi ComboBox test1, test2y test3. ¿Cómo configuro el elemento seleccionado para "test1"? Es decir, ¿cómo hago coincidir mi cadena con uno de los elementos de comboBox?

Estaba pensando en la línea de abajo, pero esto no funciona.

comboBox1.SelectedText = "test1"; 
Peter Mortensen
fuente
como no funciona ¿Qué sucede cuando se ejecuta esta línea de código?
Kate Gregory
@KateGregory simplemente concatena la cadena "test1" con el texto existente
solujic
Si tiene una manera de conocer el valor del elemento, puede usar: comboBox1.SelectedValue = Value_of_your_string;
César León
SelectedTextcambia el texto "Seleccionado" a prueba1. Si no se realiza una "Selección" (texto marcado), el texto se insertará en la posición de intercalación.
AaA

Respuestas:

278

Esto debería funcionar:

Combox1.SelectedIndex = Combox1.FindStringExact("test1")
Norbert B.
fuente
Parece una mejor respuesta para mí porque tiene un valor de retorno que puede guardar temporalmente en una variable y usarlo para probar si ha encontrado el valor que estaba buscando.
Áxel Costas Pena
¿Qué pasa si hay más de un valor "test1" en combox1
Thoitbk
@thoitbk: de acuerdo con MSDN en msdn.microsoft.com/en-us/library/… , el método FindStringExact() "Encuentra el primer elemento en el cuadro combinado que coincide con la cadena especificada".
dub
207

¿Has probado la propiedad Text ? Esto funciona para mi.

ComboBox1.Text = "test1";

La propiedad SelectedText es para la parte seleccionada del texto editable en la parte del cuadro de texto del cuadro combinado.

Andrew Kennan
fuente
77
¿Seguramente eso solo establece el texto en el área editable del ComboBox en lugar de seleccionar el elemento relevante de la lista? Si la colección de elementos de la lista contiene objetos en lugar de solo cadenas, entonces dudo que esto seleccione el objeto ListItem apropiado, sino que simplemente establecería la propiedad Text en el ComboBox.
TabbyCool
9
Establece la propiedad SelectedValue del control
Henryk
Agradable. Funciona a la perfección para el tamaño de fuente, el peso y las listas desplegables familiares. No hay conversiones o conversiones entre clases. Muuuucho más fácil!
Lance Cleveland
3
Por si acaso: este parámetro debe establecerse solo después de completar el cuadro combinado.
Antoine Rodriguez
12
Mi cuadro desplegable de cuadro combinado es DropDownList y .Text = "algún texto" no funciona. Esta solución funcionó bien para mí: Combox1.SelectedIndex = Combox1.FindStringExact ("test1")
Mayank
48

Suponiendo que su cuadro combinado no está vinculado a datos, necesitaría encontrar el índice del objeto en la colección de "elementos" en su formulario y luego establecer la propiedad "selectedindex" en el índice apropiado.

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

Tenga en cuenta que la función IndexOf puede generar una excepción de argumento si no se encuentra el elemento.

Spence
fuente
1
Recuerde que su SelectedINDEX no SelectedITEM ... Y el compilador no se quejará, simplemente no podrá establecer el valor del cuadro combinado
Rob
¿No te gustan los errores lógicos que no arrojan ninguna excepción, simplemente no funcionan ...
Spence
esto es seleccionar el elemento, pero no llamar al evento onChange en el cuadro combinado
mrid
39

Si los elementos en su ComboBox son cadenas, puede intentar:

comboBox1.SelectedItem = "test1";
Frederik Gheysels
fuente
18
No, no lo es: msdn.microsoft.com/en-us/library/…
Frederik Gheysels
¡Salvó el día! El elemento seleccionado debe coincidir con el tipo, ¡eso fue para mí! Me estaba rascando la cabeza por qué el elemento seleccionado no estaba configurado, incluso si el elemento estaba claramente allí, ¡resultó ser un desajuste de tipo!
Sudhanshu Mishra
Para completar, es útil tener la descripción del enlace anterior, especialmente porque esta respuesta realiza la comprobación de coincidencia sugerida por otras respuestas, incluida la preferida de @norbertB: cuando establece la propiedad SelectedItem en un objeto, el ComboBox intenta hacer ese objeto el seleccionado actualmente en la lista. Si el objeto se encuentra en la lista , se muestra en la parte de edición de ComboBox y la propiedad SelectedIndex se establece en el índice correspondiente. Si el objeto no existe en la lista, la propiedad SelectedIndex se deja en su valor actual.
DanG
10

Para mí esto solo funcionó:

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

MOD: y si tiene sus propios objetos como elementos configurados en el cuadro combinado, sustituya el ComboBoxItem con uno de ellos como:

foreach (Debitor d in debitorCombo.Items)
{
    if (d.Name == "Chuck Norris")
    {
        debitorCombo.SelectedItem = d;
        break;
    }
}
gabore
fuente
2
Esto funcionó para mí, pero debe tener cuidado de que los elementos de su ComboBox sean en realidad ComboBoxItems, ya que también es posible colocar otros elementos allí.
Grant
Esto funcionó muy bien en WinRT 8.1. En realidad, envolví el foreach superior en un método de extensión como el que Dave escribió en su solución SelectItemByValue (), y fue realmente la solución perfecta.
Speednet
9

SelectedText es obtener o establecer el texto real en el editor de cadenas para el elemento seleccionado en el cuadro combinado como se documenta aquí . Esto no se puede editar si configura:

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

Utilizar:

comboBox1.SelectedItem = "test1";

o:

comboBox1.SelectedIndex = comboBox1.Items.IndexOf("test1");
Brian Rudolph
fuente
1
comboBox1.Items.IndexOf ... se arriesga a una NullReferenceException si Items está vacío.
Gary
9
ComboBox1.SelectedIndex= ComboBox1.FindString("Matching String");

Prueba esto en Windows Form.

Muhammad Sohail
fuente
7

He usado un método de extensión:

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

Entonces solo consume el método:

ddl.SelectItemByValue(value);
Dave
fuente
5
comboBox1.SelectedItem.Text = "test1";
Ben
fuente
4

Suponiendo que test1, test2, test3 pertenecen a la colección comboBox1, la siguiente declaración funcionará.

comboBox1.SelectedIndex = 0; 
ihcarp
fuente
Esto no siempre funciona ... Ver aquí: stackoverflow.com/questions/12839444/…
JGFMK
4

Esta solución se basa en MSDN con algunas modificaciones que hice.

  • Encuentra exacto o PARTE de cadena y lo establece.

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

Espero haber ayudado!

Roman Polen.
fuente
3

He llenado mi ComboBox con una DataTable llena de una base de datos. Luego configuré DisplayMember y ValueMember. Y uso este código para configurar el elemento seleccionado.

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

No tiene esa propiedad en el cuadro combinado. Tiene SelectedItem o SelectedIndex. Si tiene los objetos que usó para llenar el cuadro combinado, puede usar SelectedItem.

Si no, puede obtener la colección de elementos (elementos de propiedad) e iterar hasta obtener el valor que desea y usarlo con las otras propiedades.

Espero eso ayude.

Megacan
fuente
1
_cmbTemplates.SelectedText = "test1"

o tal vez

_cmbTemplates.SelectedItem= _cmbTemplates.Items.Equals("test1");
Decano
fuente
con este código, asigna un valor bool a la propiedad SelectedItem ... no funcionará en mi humilde opinión.
Frederik Gheysels el
1
  • Enumerar elementos de lista en el cuadro combinado
  • Obtener combobox set de lista de índices iguales
  • Establezca listindex en el encontrado.

Pero si veo dicho código como un revisor de código, recomendaría reconsiderar todo el algoritmo del método.

usuario53378
fuente
2
¿Por qué lo has proporcionado como respuesta entonces?
1

Utilicé KeyValuePair para el enlace de datos de ComboBox y quería encontrar el elemento por valor, así que esto funcionó en mi caso:

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

Busque mySecondObject (de tipo MyObject) en el cuadro combinado (que contiene una lista de MyObjects) y seleccione el elemento:

foreach (MyObject item in comboBox.Items)
{
   if (item.NameOrID == mySecondObject.NameOrID)
    {
        comboBox.SelectedItem = item;
        break;
    }
}
Jos Roestenberg
fuente
0
  ListItem li = DropDownList.Items.FindByValue("13001");
  DropDownList.SelectedIndex = ddlCostCenter.Items.IndexOf(li);

Para su caso puede usar

DropDownList.Items.FindByText("Text");
usuario874163
fuente
0
combo.Items.FindByValue("1").Selected = true;
Anderson
fuente
3
Esto también conlleva una excepción si no se encuentra "1".
Gary
0

Todos los métodos, trucos y líneas de configuración de código del elemento ComboBox no funcionarán hasta que ComboBox tenga un elemento primario.

user3599362
fuente
0

He creado una función que devolverá el índice del valor

        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;
        }
Monzur
fuente
0

esto funciona para mí .....

comboBox.DataSource.To<DataTable>().Select(" valueMember = '" + valueToBeSelected + "'")[0]["DislplayMember"];
Jaydeep Karena
fuente
1
Si bien este código puede responder la pregunta, es mejor explicar cómo resolver el problema y proporcionar el código como ejemplo o referencia. Las respuestas de solo código pueden ser confusas y carecen de contexto.
Robert Columbia
¡Gracias por el consejo!
Jaydeep Karena
-1

Puedes decir comboBox1.Text = comboBox1.Items[0].ToString();

Nishān Wickramrathna
fuente
-2

Por favor, intente de esta manera, funciona para mí:

Combobox1.items[Combobox1.selectedIndex] = "replaced text";
HuynhDo
fuente
Debe verificar que selectedIndex no sea -1 primero, o más precisamente que es> = 0 y <.items.length.
Gary
-3

Deberia de funcionar

Yourcomboboxname.setselecteditem("yourstring");

Y si desea establecer una cadena de base de datos, use esto

Comboboxname.setselecteditem(ps.get string("databasestring"));
Deepak kumar
fuente