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"; 
Peter Mortensen
la source
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")
Norbert B.
la source
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.

Andrew Kennan
la source
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é.

Spence
la source
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";
Frederik Gheysels
la source
18
Non, ce n'est pas le cas: msdn.microsoft.com/en-us/library/…
Frederik Gheysels
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;
    }
}
gabore
la source
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");
Brian Rudolph
la source
1
comboBox1.Items.IndexOf ... risque une exception NullReferenceException si Items est vide.
Gary
9
ComboBox1.SelectedIndex= ComboBox1.FindString("Matching String");

Essayez ceci sous Windows.

Muhammad Sohail
la source
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);
Dave
la source
5
comboBox1.SelectedItem.Text = "test1";
Ben
la source
4

Supposons que test1, test2, test3 appartiennent à la collection comboBox1, l'instruction suivante fonctionnera.

comboBox1.SelectedIndex = 0; 
ihcarp
la source
Cela ne fonctionne pas toujours ... Voir ici: stackoverflow.com/questions/12839444/…
JGFMK
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é!

Roman Polen.
la source
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;
}
Jelle Smits
la source
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.

Megacan
la source
1
_cmbTemplates.SelectedText = "test1"

ou peut-être

_cmbTemplates.SelectedItem= _cmbTemplates.Items.Equals("test1");
doyen
la source
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.

user53378
la source
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");
Amit Bhagat
la source
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;
    }
}
Jos Roestenberg
la source
0
  ListItem li = DropDownList.Items.FindByValue("13001");
  DropDownList.SelectedIndex = ddlCostCenter.Items.IndexOf(li);

Pour votre cas, vous pouvez utiliser

DropDownList.Items.FindByText("Text");
user874163
la source
0
combo.Items.FindByValue("1").Selected = true;
Anderson
la source
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.

user3599362
la source
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;
        }
Monzur
la source
0

cela fonctionne pour moi .....

comboBox.DataSource.To<DataTable>().Select(" valueMember = '" + valueToBeSelected + "'")[0]["DislplayMember"];
Jaydeep Karena
la source
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
-1

Tu peux dire comboBox1.Text = comboBox1.Items[0].ToString();

Nishān Wickramrathna
la source
-2

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

Combobox1.items[Combobox1.selectedIndex] = "replaced text";
HuynhDo
la source
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"));
Deepak kumar
la source