¿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"; 

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

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.


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.


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


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

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

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.


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

5
comboBox1.SelectedItem.Text = "test1";


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!


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

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.


1
_cmbTemplates.SelectedText = "test1"

o tal vez

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

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.


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

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

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

Para su caso puede usar

DropDownList.Items.FindByText("Text");

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

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.


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

0

esto funciona para mí .....

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

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


-2

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

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

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"));
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.