winforms agregar - ¿Cómo configuro el elemento seleccionado en un comboBox para que coincida con mi cadena usando C#?




llenar 2010 (20)

Tengo una cadena "test1" y mi comboBox contiene test1 , test2 y test3 . ¿Cómo configuro el elemento seleccionado a "prueba1"? Es decir, ¿cómo puedo unir mi cadena a uno de los elementos de comboBox?

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

comboBox1.SelectedText = "test1"; 

Answers

Para mí esto solo funcionaba:

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, entonces sustituya el ComboBoxItem por uno de ellos como:

foreach (Debitor d in debitorCombo.Items)
{
    if (d.Name == "Chuck Norris")
    {
        debitorCombo.SelectedItem = d;
        break;
    }
}

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


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

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

Utilizar:

comboBox1.SelectedItem = "test1";

o:

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

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

  • Encuentra la cadena exacta o PARTE de cadena y la 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!


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 consuma el método:

ddl.SelectItemByValue(value);

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

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

Si los artículos en su ComboBox son cadenas, puede intentar:

comboBox1.SelectedItem = "test1";

  • Enumerate ListItems en combobox
  • Obtenga los mismos listindex set combobox
  • Establezca listindex en el encontrado.

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


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

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

Espero eso ayude.


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

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

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

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

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

Suponiendo que su cuadro combinado no esté enlazado a datos, necesitará encontrar el índice del objeto en la colección "artículos" en su formulario y luego establecer la propiedad "indexado seleccionado" en el índice apropiado.

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

Tenga en cuenta que la función IndexOf puede arrojar una opinión discutida si el elemento no se encuentra.


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

Para su caso, puede usar

DropDownList.Items.FindByText("Text");

comboBox1.SelectedItem.Text = "test1";

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

esto funciona para mí .....

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

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

comboBox1.SelectedIndex = 0; 

Esto debería funcionar:

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

La primera parte de su pregunta (cómo obtener los bytes) ya fue respondida por otros: busque en el System.Text.Encoding nombres System.Text.Encoding .

Abordaré su pregunta de seguimiento: ¿por qué necesita elegir una codificación? ¿Por qué no puedes obtener eso de la propia clase de cadena?

La respuesta está en dos partes.

En primer lugar, los bytes utilizados internamente por la clase de cadena no importan , y siempre que asuma que lo hacen, es probable que esté introduciendo un error.

Si su programa está completamente dentro del mundo .Net, entonces no necesita preocuparse por obtener matrices de bytes para cadenas, incluso si está enviando datos a través de una red. En su lugar, use .Net Serialization para preocuparse por la transmisión de datos. Ya no se preocupa por los bytes reales: el formateador de serialización lo hace por usted.

Por otro lado, ¿qué sucede si está enviando estos bytes a algún lugar que no puede garantizar que extraerá datos de un flujo serializado .Net? En este caso, definitivamente debe preocuparse por la codificación, porque obviamente a este sistema externo le importa. De nuevo, los bytes internos utilizados por la cadena no importan: debe elegir una codificación para que pueda ser explícito acerca de esta codificación en el extremo receptor, incluso si es la misma codificación utilizada internamente por .Net.

Entiendo que en este caso, es posible que prefiera usar los bytes reales almacenados por la variable de cadena en la memoria siempre que sea posible, con la idea de que podría ahorrar algo de trabajo al crear su flujo de bytes. Sin embargo, te lo pongo, no es importante en comparación con asegurarte de que tu salida se comprenda en el otro extremo y garantizar que debes ser explícito con tu codificación. Además, si realmente desea hacer coincidir sus bytes internos, ya puede elegir la codificación Unicode y obtener ese ahorro de rendimiento.

Lo que me lleva a la segunda parte ... elegir la codificación Unicode es decirle a .Net que use los bytes subyacentes. Es necesario que elija esta codificación, porque cuando aparece Unicode-Plus con nuevos colmillos, el tiempo de ejecución .Net debe ser libre para usar este modelo de codificación mejor y más nuevo sin interrumpir su programa. Pero, por el momento (y el futuro previsible), con solo elegir la codificación Unicode, obtendrá lo que desea.

También es importante entender que la cadena debe volver a escribirse en el cable, y eso implica al menos una traducción del patrón de bits, incluso cuando se utiliza una codificación coincidente . La computadora debe tener en cuenta cosas como Big vs Little Endian, orden de bytes de la red, paquetización, información de sesión, etc.





c# winforms combobox