Comment définir l'élément sélectionné dans une zone de liste déroulante pour qu'il corresponde à ma chaîne à l'aide de C #?


197

J'ai une chaîne « test1 » et mon ComboBox test1, test2et test3. Comment définir l'élément sélectionné sur "test1"? Autrement dit, comment puis-je faire correspondre ma chaîne à l'un des éléments comboBox?

Je pensais à la ligne ci-dessous, mais cela ne fonctionne pas.

comboBox1.SelectedText = "test1"; 

comment ça marche pas? Que se passe-t-il lorsque cette ligne de code s'exécute?
Kate Gregory

@KateGregory il concatène juste la chaîne "test1" au texte existant
solujic

Si vous avez un moyen de connaître la valeur de l'élément, vous pouvez utiliser: comboBox1.SelectedValue = Value_of_your_string;
César León

SelectedTextchange le texte "Sélectionné" en test1. s'il n'y a pas de "sélection" (texte marqué), le texte sera inséré à la place du curseur.
AaA

Réponses:


278

Cela devrait faire l'affaire:

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

Semble une meilleure réponse pour moi parce que vous avez une valeur de retour que vous pouvez enregistrer temporairement dans une variable et l'utiliser pour tester si vous avez trouvé la valeur que vous cherchiez.
Áxel Costas Pena

et s'il y a plus d'une valeur "test1" dans combox1
thoitbk

@thoitbk - Selon le MSDN à msdn.microsoft.com/en-us/library/… , la méthode FindStringExact() "recherche le premier élément de la zone de liste déroulante qui correspond à la chaîne spécifiée."
dub stylee

207

Avez-vous essayé la propriété Text ? Ça marche pour moi.

ComboBox1.Text = "test1";

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.


7
Assurément, cela ne fait que placer le texte dans la zone modifiable de la zone de liste déroulante plutôt que de sélectionner l'élément approprié dans la liste? Si la collection d'éléments de liste contient des objets plutôt que de simples chaînes, je doute que cela sélectionne l'objet ListItem approprié, mais plutôt qu'il définisse simplement la propriété Text sur le ComboBox?
TabbyCool

9
Il définit la propriété SelectedValue du contrôle
Henryk

Agréable. Fonctionne parfaitement pour la taille de la police, le poids et les listes déroulantes familiales. Pas de transtypage ni de conversion entre les classes. Soooo beaucoup plus facile!
Lance Cleveland

3
Juste au cas où: ce paramètre ne doit être défini qu'après avoir rempli la zone de liste déroulante.
Antoine Rodriguez

12
Ma liste déroulante combobox est DropDownList et .Text = "du texte" ne fonctionne pas. Cette solution a bien fonctionné pour moi: Combox1.SelectedIndex = Combox1.FindStringExact ("test1")
Mayank le

48

En supposant que votre zone de liste déroulante n'est pas liée aux données, vous devez rechercher l'index de l'objet dans la collection "items" de votre formulaire, puis définir la propriété "selectedindex" sur l'index approprié.

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

Gardez à l'esprit que la fonction IndexOf peut lever une exception d'argument si l'élément n'est pas trouvé.


1
Rappelez-vous que son SelectedINDEX n'est pas SelectedITEM ... Et le compilateur ne se plaindra pas, échouera simplement à définir la valeur de la zone de liste déroulante
Rob

N'aimez-vous pas les erreurs logiques qui ne font pas exception, elles ne fonctionnent tout simplement pas ...
Spence

ceci sélectionne l'élément, mais n'appelle pas l'événement
onChange

39

Si les éléments de votre zone de liste déroulante sont des chaînes, vous pouvez essayer:

comboBox1.SelectedItem = "test1";


Sauvé la journée! L'élément sélectionné doit correspondre au type - c'était tout pour moi! Je me grattais la tête pourquoi l'élément sélectionné n'était pas défini, même l'élément était clairement là - s'est avéré être une incompatibilité de type!
Sudhanshu Mishra

Pour être complet, utile d'avoir la description du lien ci-dessus, d'autant plus que cette réponse effectue la vérification de correspondance suggérée par d'autres réponses, y compris la préférée de @norbertB: lorsque vous définissez la propriété SelectedItem sur un objet, le ComboBox tente de créer cet objet celui actuellement sélectionné dans la liste. Si l'objet est trouvé dans la liste , il s'affiche dans la partie édition du ComboBox et la propriété SelectedIndex est définie sur l'index correspondant. Si l'objet n'existe pas dans la liste, la propriété SelectedIndex est conservée à sa valeur actuelle.
DanG

10

Pour moi, cela n'a fonctionné que:

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

MOD: et si vous avez vos propres objets en tant qu'éléments configurés dans la zone de liste déroulante, remplacez le ComboBoxItem par l'un d'eux comme:

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

2
Cela a fonctionné pour moi, mais vous devez faire attention à ce que les éléments de votre ComboBox soient en fait des ComboBoxItems car il est également possible d'y insérer d'autres éléments.
Grant

Cela a très bien fonctionné dans WinRT 8.1. J'ai en fait enveloppé le foreach supérieur dans une méthode d'extension comme dave l'a écrit dans sa solution SelectItemByValue (), et c'était vraiment la solution parfaite.
Speednet

9

SelectedText consiste à obtenir ou à définir le texte réel dans l'éditeur de chaînes pour l'élément sélectionné dans la zone de liste déroulante, comme indiqué ici . Cela ne peut pas être modifié si vous définissez:

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

Utilisation:

comboBox1.SelectedItem = "test1";

ou:

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

1
comboBox1.Items.IndexOf ... risque une exception NullReferenceException si Items est vide.
Gary

9
ComboBox1.SelectedIndex= ComboBox1.FindString("Matching String");

Essayez ceci sous Windows.


7

J'ai utilisé une méthode d'extension:

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

Ensuite, consommez simplement la méthode:

ddl.SelectItemByValue(value);

5
comboBox1.SelectedItem.Text = "test1";


4

Cette solution est basée sur MSDN avec quelques modifications que j'ai apportées.

  • Il trouve exact ou PART de chaîne et le définit.

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

J'espère avoir aidé!


3

J'ai rempli mon ComboBox avec een DataTable rempli à partir d'une base de données. Ensuite, j'ai défini le DisplayMember et le ValueMember. Et j'utilise ce code pour définir l'élément sélectionné.

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

1

Vous n'avez pas cette propriété dans le ComboBox. Vous avez SelectedItem ou SelectedIndex. Si vous avez les objets que vous avez utilisés pour remplir la zone de liste modifiable, vous pouvez utiliser SelectedItem.

Sinon, vous pouvez obtenir la collection d'éléments (propriété Items) et l'itérer jusqu'à ce que vous obteniez la valeur souhaitée et l'utiliser avec les autres propriétés.

J'espère que ça aide.


1
_cmbTemplates.SelectedText = "test1"

ou peut-être

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

avec ce code, vous affectez un booléen à la propriété SelectedItem ... ne fonctionnera pas à mon humble avis.
Frederik Gheysels,

1
  • Énumérer ListItems dans la zone de liste déroulante
  • Obtenir une liste déroulante de liste d'index égaux
  • Définissez listindex sur celui trouvé.

Mais si je vois un tel code comme un réviseur de code, je recommanderais de reconsidérer tout l'algorithme de la méthode.


2
Pourquoi l'avez-vous répondu alors?

1

J'ai utilisé KeyValuePair pour la liaison de données ComboBox et je voulais trouver un élément par valeur , cela a donc fonctionné dans mon cas:

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

1

Recherchez mySecondObject (de type MyObject) dans la zone de liste déroulante (contenant une liste de MyObjects) et sélectionnez l'élément:

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

Pour votre cas, vous pouvez utiliser

DropDownList.Items.FindByText("Text");

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

3
Cela risque également une exception si "1" n'est pas trouvé.
Gary

0

Toutes les méthodes, astuces et lignes de code définissant l'élément ComboBox ne fonctionneront pas tant que ComboBox n'aura pas de parent.


0

J'ai créé une fonction qui renverra l'index de la valeur

        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

cela fonctionne pour moi .....

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

1
Bien que ce code puisse répondre à la question, il est préférable d'expliquer comment résoudre le problème et de fournir le code comme exemple ou référence. Les réponses uniquement codées peuvent prêter à confusion et manquer de contexte.
Robert Columbia

Merci pour le conseil!
Jaydeep Karena


-2

Veuillez essayer de cette façon, cela fonctionne pour moi:

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

Vous devez vérifier que selectedIndex n'est pas -1 en premier, ou plus précisément qu'il est> = 0 et <.items.length.
Gary

-3

Ça devrait marcher

Yourcomboboxname.setselecteditem("yourstring");

Et si vous voulez définir une chaîne de base de données, utilisez ceci

Comboboxname.setselecteditem(ps.get string("databasestring"));
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.