web-dev-qa-db-fra.com

Comment définir l'élément sélectionné de ComboBox dans Windows Forms C #?

J'essaie de définir l'élément sélectionné de comboBox sur l'événement de clic de DataGrid, mais je ne pouvais pas. J'ai googlé et essayé différentes méthodes mais sans succès.

Pour moi, SelectedIndex fonctionne, mais je ne pouvais pas trouver l'index des éléments dans ComboBox, je ne pouvais donc pas sélectionner l'élément.

Code non fonctionnel:

for (int i = 0; i < cmbVendor.Items.Count; i++)

    if (cmbVendor.Items[i].ToString() == Convert.ToString(gridView1.GetFocusedRowCellValue("vVendor")))
    {
        cmbVendor.SelectedIndex = i;
        break;
    }
6
Azhar

Vous pouvez obtenir votre index par la méthode .Items.IndexOf(). Essaye ça:

comboBox1.SelectedIndex = comboBox1.Items.IndexOf(gridView1.GetFocusedRowCellValue("vVendor"));

Vous n'avez pas besoin d'itérer.

Vous pouvez trouver plus d'informations dans la question Débordement de pileComment définir l'élément sélectionné dans une comboBox pour qu'il corresponde à ma chaîne en utilisant C #?.

14
Kamil

Ce qui suit fonctionne parfaitement pour moi. Transmettez toute valeur ou texte disponible dans la liste déroulante.

comboBox1.SelectedIndex = comboBox1.FindString(<combobox value OR Text in string formate>);
11
ashish Patel

Vous l'avez dans votre si:

cmbVendor.SelectedItem = cmbVendor.Items[i];
4
Steve

Enfin je l'ai découvert. Ses:

cmbVendor.Text = Convert.ToString(gridView1.GetFocusedRowCellValue("vVendor"));

La propriété SelectedText concerne la partie sélectionnée du texte modifiable dans la partie zone de texte de la zone de liste déroulante.

2
Azhar

En supposant que gridView1.GetFocusedRowCellValue("vVendor") fonctionne vraiment comme prévu, le code suivant devrait résoudre le problème.

string selected = Convert.ToString(gridView1.GetFocusedRowCellValue("vVendor"));
foreach ( var item in cmbVendor.Items )
{
    if (string.Compare(item.ToString(), selected, StringComparison.OrdinalIgnoreCase) == 0)
    {
        cmbVendor.SelectedItem = item;
        break;
    }
}

Le code d'origine comportait plusieurs appels à gridView1.GetFocusedRowCellValue("vVendor"), alors que vous n'en avez besoin que d'un.

Le "comboBox1.Items.IndexOf (") suggéré suppose trop de choses sur le contenu de cmbVendor.Items.

1
b0rg
ComboBox1.SelectedIndex= ComboBox1.FindString("Matching String");

Essayez ceci cela fonctionnera correctement dans une application Windows C #

0
Muhammad Sohail

Si vous avez défini la propriété ValueMember pour le contrôle ComboBox, vous pouvez simplement associer la valeur à la propriété SelectedValue du contrôle ComboBox. Vous n'avez pas besoin de rechercher explicitement l'index. Voici un exemple:

public class Vendor{
    public int VendorId {get; set;}
    public string VendorName {get; set;}
}

// Inside your function
   var comboboxData = new List<Vendor>(){
       new Vendor(){ vendorId = 1, vendorName = "Vendor1" },
       new Vendor(){ vendorId = 2, vendorName = "Vendor2" }
   }

   cmbVendor.DataSource = comboboxData;
   cmbVendor.DisplayMember = "VendorName";
   cmbVendor.ValueMember = "ValueId";

// Now, to change your selected index to the ComboBox item with ValueId of 2, you can simply do:
   cmbVendor.SelectedValue = 2;
0
chaosifier

J'ai eu un problème similaire et l'ai partiellement résolu à l'aide des autres réponses fournies ici. Premièrement, mon problème particulier était que 

combobox1.SelectedItem = myItem;

ne fonctionnait pas comme prévu. La cause principale était que myItem était un objet d'un groupe qui était en réalité la même liste que les éléments de la liste déroulante, mais qu'il s'agissait en fait d'une copie de ces éléments. Ainsi, myItem était identique à une entrée valide, mais n'était pas un objet valide du conteneur combobox1.

La solution consistait à utiliser SelectedIndex au lieu de SelectedItem, comme suit:

combobox1.SelectedIndex = get_combobox_index(myItem);

où 

    private int get_combobox_index(ItemClass myItem)
    {
        int i = 0;
        var lst = combobox1.Items.Cast<ItemClass >();
        foreach (var s in lst)
        {
            if (s.Id == myItem.Id)
                return i;

            i++;
        }
        return 0;
    }
0
AJameson56