Discussion: Événement sur un ComboBox [Lazarus]

  1. #1
    Futur Membre du Club
    Homme Profil pro
    ingénieur électromécanique
    Inscrit en
    février 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : Belgique

    Informations professionnelles :
    Activité : ingénieur électromécanique
    Secteur : Services à domicile

    Informations forums :
    Inscription : février 2016
    Messages : 6
    Points : 9
    Points
    9

    Par défaut Événement sur un ComboBox

    Je suis un nouvel utilisateur de la POO et j'ai choisi Lazarus car je suis le Monsieur Technique d'une asbl. Les coûts doivent donc être réduits...
    Question :
    Je voudrais soit sélectionner le texte de la liste du ComboBox, soit taper un texte dans le ComboBox et faire les tests sur le combobox.text après.
    Je m’en sors avec l’événement Onexit sinon ça ne va pas (le Enter ne se fait pas au bon moment). Mais on devrait avoir mieux que Onexit qui m’oblige à taper HORS du combobox (pas très "logique") pour compléter mes Edit et tout le reste…
    Je ne vois pas comment faire ? (quand j'introduis un nouveau nom qui n’est pas dans la liste, je peux alors après un test, créer une nouvelle entrée dans mon fichier Dbf...)

    Merci pour vos éclairages,

  2. #2
    Membre confirmé

    Homme Profil pro
    Rédacteur technique (retraité)
    Inscrit en
    octobre 2009
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Rédacteur technique (retraité)

    Informations forums :
    Inscription : octobre 2009
    Messages : 115
    Points : 534
    Points
    534

    Par défaut

    Bonjour

    Voir l'événement 'OnEditingDone' de TComboBox.
    Cet événement se produit :
    • A l'appui sur Enter après avoir édité quelque chose dans le zone de saisie
    • Si un autre élément est sélectionné dans la liste.
    • Si le composant perd le focus.

    (Dans les deux premiers cas le composant garde le focus).

  3. #3
    Futur Membre du Club
    Homme Profil pro
    ingénieur électromécanique
    Inscrit en
    février 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : Belgique

    Informations professionnelles :
    Activité : ingénieur électromécanique
    Secteur : Services à domicile

    Informations forums :
    Inscription : février 2016
    Messages : 6
    Points : 9
    Points
    9

    Par défaut

    Merci
    J'ai déjà essayé et évidemment c'est une solution mais j'aimerais ne pas décider de suite sur la sélection de la liste dans la ComboBox.
    Avec le OnEditingDone :
    Si on sélectionne un élément de la liste combo, c'est terminé et on passe à l'étape suivante.
    On peut aussi taper un nom (nouvel élément) dans la sélection de la ComboBox et ça marche après appui sur le Enter.
    ==> Mais est-ce possible de sélectionner un élément de la liste puis de le modifier si nécessaire ?
    (c'est pour ça que le OnExit me va partiellement bien)
    Est-ce possible de trouver une solution en combinant plusieurs événements en y mettant la même valeur ?

  4. #4
    Membre confirmé

    Homme Profil pro
    Rédacteur technique (retraité)
    Inscrit en
    octobre 2009
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Rédacteur technique (retraité)

    Informations forums :
    Inscription : octobre 2009
    Messages : 115
    Points : 534
    Points
    534

    Par défaut

    Citation Envoyé par andre corbi Voir le message
    Est-ce possible de trouver une solution en combinant plusieurs événements en y mettant la même valeur ?
    J'avoue ne pas bien comprendre la question, un événement est un événement, pas une variable dans laquelle on peut stocker une valeur.

    Par ailleurs pour reprendre une phrase de ton post initial :
    Citation Envoyé par andre corbi Voir le message
    Je voudrais soit sélectionner le texte de la liste du ComboBox, soit taper un texte dans le ComboBox et faire les tests sur le combobox.text après.
    Il me semble possible, sans passer par un événement de la combobox, de déterminer si le texte de la combobox correspond ou non à un élément de sa liste déroulante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    If Combobox1.Items.IndexOf(Combobox1.Text) < 0 Then Begin
             // ici actions si nouvel élément
        end 
    Else Begin
            // et ici actions si élément déjà dans la liste
    end;

  5. #5
    Membre confirmé

    Homme Profil pro
    Amateur Passionné
    Inscrit en
    septembre 2015
    Messages
    293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : septembre 2015
    Messages : 293
    Points : 588
    Points
    588

    Par défaut

    Salut pour le comportement que tu souhaites il faut rajouter un Bouton "Valider" Et hop tu peux changer le texte de ton combobox, la validation ne se fera que lorsque l'utilisateur cliquera sur le bouton. Sinon comment faire pour décider si le test sur ta chaine de caractère doit avoir lieux ? c'est impossible soit tu testes quand tu sélectionnes ou as finis de taper ton texte, soit tu vérifie tout globalement par le clique sur le bouton.
    Sinon faut faire une AI avec réseaux de neurones et tout le bazar afin que ton logiciel décide "devine" a qu'elle moment il doit vérifier les actions de l'utilisateur

    Donc soit tu testes à chaque changement de valeur, soit tu testes toutes tes valeurs lorsque que l'utilisateur le demande.
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

  6. #6
    Futur Membre du Club
    Homme Profil pro
    ingénieur électromécanique
    Inscrit en
    février 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : Belgique

    Informations professionnelles :
    Activité : ingénieur électromécanique
    Secteur : Services à domicile

    Informations forums :
    Inscription : février 2016
    Messages : 6
    Points : 9
    Points
    9

    Par défaut

    Si je clique sur un élément de la liste du ComboBox, je ne peux plus le modifier ! C'est possible de taper un nouveau nom (avec propriétés autocomplete, sorted ) SI je ne le sélectionne pas dans la liste puis Enter. J'aurais aimé faire les deux sans créer un nouveau réseau neuronal... Simplement un Enter quand soit j'ai sélectionné le nom de la liste (modifié ou non) ou taper un nouveau nom.
    Vous m'avez en tous cas fait bien rire !

  7. #7
    Membre confirmé

    Homme Profil pro
    Amateur Passionné
    Inscrit en
    septembre 2015
    Messages
    293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : septembre 2015
    Messages : 293
    Points : 588
    Points
    588

    Par défaut

    Citation Envoyé par andre corbi Voir le message
    Vous m'avez en tous cas fait bien rire !
    Tant mieux

    Ok l'astuce consiste à ne rien faire dans l'événement EditiongDone

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    procedure Tform1.ComboBox1EditingDone(Sender: TObject);
    begin
     // Ne fait rien
    end;
     
    procedure Tform1.ComboBox1Exit(Sender: TObject);
    begin
       Showmessage(Combobox1.Text); //---> Teste de la valeur 
    end;
     
    procedure Tform1.ComboBox1KeyPress(Sender: TObject; var Key: char);
    begin
      if Key = #13 then
      begin    
        ComboBox1Exit(sender);
      end;
    end;
    et décoches les propriétés AutoSelect et AutoDropDown

    je pense que c'est le comportement que tu recherches

    Le test sur ta valeur ne se fera que quand tu appuieras su la touche Entrée ou Tab ou que la combobox perdra le focus (clique dans une autre combobox par exemple)

    A+
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 03/12/2014, 10h34
  2. Quel évènement sur le redimensionnement ?
    Par Yoh dans le forum Fenêtres/Dialogues
    Réponses: 2
    Dernier message: 01/07/2004, 14h05
  3. [VB.NET] Problème sur composant comboBox hérité
    Par SergeF dans le forum Windows Forms
    Réponses: 3
    Dernier message: 08/06/2004, 15h54
  4. [Débutant][jsp] évènement sur une liste
    Par phoebe dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 14/05/2004, 11h53
  5. Problèmes d'évènements sur ComboBox
    Par bakaneko dans le forum MFC
    Réponses: 3
    Dernier message: 23/02/2004, 09h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo