Comment ne pas pouvoir rentrer deux memes items dans une ComboBox ?

Résolu
Signaler
Messages postés
22
Date d'inscription
mardi 19 avril 2005
Statut
Membre
Dernière intervention
23 octobre 2005
-
Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
-
Bonjour,
Je programme en Delphi depuis pas très longtemps !
Voila mon problème : je dispose d'un Edit, d'un bouton nommé "ajouter" et d'une combobox.
Lorsque je clique sur le bouton "ajouter" j'ai le texte marqué dans Edit qui s'insert dans un nouvel Item de ma ComboBox.
Je voudrais savoir si il est possible et comment faire afin de ne pas pouvoir ajouter deux fois le meme item, donc pour ne pas avoir deux fois le meme item !
En fait, si je mets un certain texte dans Edit, et si je clique deux fois sur le bouton "ajouter", je souhaiterais qu'il n y ait qu'un seul item dans ma Combobox possédant le nom marqué dans Edit !
Merci d'avance !

Val08000

12 réponses

Messages postés
3834
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
20 octobre 2021
124
Tu lis tout simplement le contenus des items de ta combobox, et tu regarde s'il n'existe pas déjà.



Exemple:(à adapter)



function EstPresent(Element:string):Boolean;

var

i:integer;

begin

Result:= False;

For i:=0 to combobox1.ItemsCount-1 do

begin

If ComboBox1.Items[i] = Element then Result:=True;

end;

end;



Ensuite tu n'a qu'a tester s'il l'élément existe:



If not EstPresent(Edit1.Text) then else ShowMessage('L'élément est déjà présent !');
Messages postés
22
Date d'inscription
mardi 19 avril 2005
Statut
Membre
Dernière intervention
23 octobre 2005

Ok Merci,
Mais alors tout ca, je le mets dans une procedure ?
Désolé de demander destrucs pareils mais voila ke je débute !
Merci !

Val08000
Messages postés
3834
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
20 octobre 2021
124
Non, tu le met simplement dans ton code. Vu que ca utilise un composant, tu met:

function Form1.EstPresent(Element:string):Boolean;



si tu y arrive vraimnet pas je t'enverrai une source.
Messages postés
22
Date d'inscription
mardi 19 avril 2005
Statut
Membre
Dernière intervention
23 octobre 2005

Oui si ca te derange pas, je veux bien la source car la c un peu galere ! Tu peux me l'envoyer a [mailto:val08000@yahoo.fr val08000@yahoo.fr] si ca t'arrange !

En tout cas Merci !

Val08000
Messages postés
3834
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
20 octobre 2021
124
Ok, laisse moi 5-10 minutes.
Messages postés
22
Date d'inscription
mardi 19 avril 2005
Statut
Membre
Dernière intervention
23 octobre 2005

Impecccable !!!!!
C génial !Merci beaucoup !
Sinon, ils sont pas mal tes boutons ! Comment tu fé pour les avoir ?

Encore Merci pour tout !

Val08000
Messages postés
3834
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
20 octobre 2021
124
Pour les boutons tu ajoute simplement le style XP a ta forme. Pour cela
tu ajoute 'XPMan' dans les uses c'est tout. (regarde la source que je
t'ai envoyé).
Messages postés
22
Date d'inscription
mardi 19 avril 2005
Statut
Membre
Dernière intervention
23 octobre 2005

Oki !
Merci beaucoup pour tout !
@+

Val08000
Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
12
salut ,

il y a plus simple pour savoir si un élément est présent dans une liste : il suffit d'utiliser la methode items.IndexOf() qui recherche la position d'un élément dans une liste.

if ComboBox1.Items.IndexOf(element)<>-1 then l'élément est dans la liste;
Messages postés
22
Date d'inscription
mardi 19 avril 2005
Statut
Membre
Dernière intervention
23 octobre 2005

Ah oué !
Beh heu pourrais tu me donner plus d'infos, car la, ce ke je suis en train de faire, ca ne fonctionne pas !
Merci !

Val08000
Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
12
salut,

je ne vois pas le probleme chez moi ça marche.

tu peux utliser le test soit directement à la place de la fonction EstPresent(element) puisque if ComboBox1.Items.IndexOf(element)<>-1 then est vrai si l'élément est dans liste

IndexOf(var:string) est une methode de TStrings;

pour l'utliser directement tu fais:

if ComboBox1.Items.IndexOf(element)<>-1 then

begin

MessageDlg(element +' est deja dans la liste', mtError , [mbOk], 0);

exit; // on averti et on sort sans rien faire

end else;

begin

ComboBox1.Items.Append(element); // met l'élement à la fin de la liste

end;

nota : element doit être une variable de type string;

soit tu l'utilises dans la fonction de cpt pingu

tu fais:

function EstPresent(Element:string):Boolean;

begin
Result:= False;
if ComboBox1.Items.IndexOf(element)<>-1 then Result: =true;

end;

ça marche aussi mais cela donne un code un peu moins efficace que l'utilisation directe.

ComboBox1.Items est un TStrings si tu veux en savoir plus sur les TStrings vas voir dans l'aide DELPHI à la rubrique TStrings tu y trouveras toutes les propriétés et méthodes permettant de les manipuler (insertion, supression, tri..........)

ainsi chaque fois que tu trouveras Items dans un composant tu pourras utiliser ces propriétes et ces methodes;

bonne prog

Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
12
c'est encore moi

puisque tu utilises une combobox si tu mets la proprété AutoComplete a true Delphi te donne directement les élélents qui contiennent ce que vient d'être saisie dans la propriété Text