Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VC++ .NET Discussion :

Donner le Focus à un Usercontrol dupliqué


Sujet :

VC++ .NET

  1. #1
    Candidat au Club
    Femme Profil pro
    Analyse système
    Inscrit en
    septembre 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : septembre 2018
    Messages : 7
    Points : 3
    Points
    3
    Par défaut Donner le Focus à un Usercontrol dupliqué
    Bonjour à tous !

    Cela fait 2 jours que je me prends la tête pour quelque chose qui parrait tellement simple mais qui en réalité pour moi savère une grosse galère.

    J'ai une Form1 qui contient un Flowlayoutpanel1 dans le quelle se duplique un Usercontrol qui contient une Checkbox, une Textbox et un bouton Delete.

    "La Checkbox sert à afficher le bouton Delete"

    A chaque fois que l'on scanne une référence dans la textbox automatiquement le Usercontrol se duplique en dessous et ainsi de suite.

    Le problème arrive maintenant !

    Imaginons que je viens de scanner "x" référence et que tout d'un coup je me trompe et que je dois supprimer une ligne.

    Je clique sur ma Checkbox de la ligne a supprimer et ensuite je clique sur le bouton Delete.

    Mais maintenant mon Focus n'est plus sur la Textbox de mon dernier Usercontrol tout en dessous.

    J'ai déjà tenté de mettre textbox1.select sur mon bouton delete mais automatiquement ses la textbox1 de mon usercontrol tout en haut de la liste qui est sélectionné.

    Hors que moi je cherche que ça soit le dernier tout en bas de ma liste.

    J'ai déjà tenté de faire une commande pour récupérer qui avait en dernier le Focus mais cela n'a pas fonctionné non plus.

    Je précise aussi que a chaque fois qu'un usercontrol est validé via la touche enter, automatiquement la textbox1 du control précédent passe en Enabled = False

    Donc à chaque fois dans mon flowlayoutpanel je n'ai qu'une seul textbox1 qui est Enabled = True. Je ne sais pas si cela peut donner une solution pour la retrouver et lui donner le focus.

    Si quelqu'un aurait une solution à me présenter ou une piste pour que je puisse corriger se problème je serai vraiment très Heureux !

    Merci d'avance.

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    septembre 2005
    Messages
    27 014
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2005
    Messages : 27 014
    Points : 40 093
    Points
    40 093
    Par défaut
    Déjà, comment gères-tu la liste de tes usercontrol? Laisses-tu entièrement le flowlayoutpanel gérer tout ça, ou maintiens-tu une liste séparée avec laquelle tu updates le flowlayoutpanel?
    Enfin toujours est-il, je pense que pour la gestion de ton bouton Delete du devrais:
    1. Trouver le usercontrol qui a le focus, ou simplement le premier usercontrol coché
    2. Trouver le premier usercontrol non-coché après celui-ci, mémoriser la référence
    3. Supprimer ce qu'il faut supprimer
    4. Faire un Select() sur la textbox du usercontrol mémorisé en 2.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Candidat au Club
    Femme Profil pro
    Analyse système
    Inscrit en
    septembre 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : septembre 2018
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Salut Medinoc,
    Alors pour commencer je laisse gérer mon flowlayout panel.
    En gros à chaque fois que la textbox est validé avec les touche enter je demande de rajouter un nouveau usercontrol juste en dessous.
    Pour le bouton delete je l'ai rajouter directement sur le usercontrol pour justement éviter de devoir chercher toute les checkbox sélectionner dans la liste. Donc chaque ligne a son propre bouton delete.
    Le problème est que je ne comprends pas comment je pourrais rechercher quelques choses dans mon flowlayout panel hors que tous mes usercontrol se nomme usercontrol1.
    Je suppose qu'il devrait y avoir une commande pour dire sélectionner le dernier usercontrol dans le flowlayoutpanel ou quelques choses de se genre.
    J'ai déjà tenté tellement de commande et de possibilité qu'à force je me dit que cela n'est pas possible. En tout cas merci de te pencher sur mon problème.

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    septembre 2005
    Messages
    27 014
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2005
    Messages : 27 014
    Points : 40 093
    Points
    40 093
    Par défaut
    As-tu essayé la propriété Controls de ton FlowLayoutPanel?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Candidat au Club
    Femme Profil pro
    Analyse système
    Inscrit en
    septembre 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : septembre 2018
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Oui j'ai même commencé par ça. Je ne sais pas te fournir mon code exacte car je ne suis pas sur mon pc actuellement mais c'était quelques choses comme ça :

    Code vba : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Dim count As Integer = CountVisibleChildControls(Of UserControl1)(Form1.FlowLayoutPanel1)
          Dim ctrls() As Control = Form1.FlowLayoutPanel1.Controls.Find("usercontrol1", False)
     
          For Each c As Control In ctrls
              c.Select()
          Next
     
          If (ctrls.Length > 0) Then
              ctrls(count).Select()
          End If
     
      End Sub

    C'est juste un exemple. Mais le code n'a strictement eu aucun effet. Pas d'erreur non plus.

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    février 2005
    Messages
    4 729
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : février 2005
    Messages : 4 729
    Points : 11 143
    Points
    11 143
    Par défaut
    C'est pas cool de nous snober.

    Et Ici, c'est du C++/CLI, pas du VB.NET.

    Pouvez-vous répondre à mes questions, avant que je demande le transfert vers le bon forum ?

  7. #7
    Candidat au Club
    Femme Profil pro
    Analyse système
    Inscrit en
    septembre 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : septembre 2018
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Je vous snob pas du tout bacelar

    J'agrandis juste mon centre de recherche.

    Mais finalement j'ai réussi à résoudre mon problème que j'irai bien évidemment poster de l'autre coté.

    Alors maintenant explication...

    J'ai constaté que quand mon focus est situé sur un bouton sur ma Form1 et que je faisais un SHIFT TAB automatiquement le focus repartait sur le dernier control de mon flowlayoutpanel
    Donc voilà maintenant quand je clique sur le bouton Delete, je demande de positionner le focus sur le Bouton de ma form1 et j'envoi un SendKeys avec SHIFT TAB et le tour est joué !
    En tout cas merci quand même pour votre aide !

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    février 2005
    Messages
    4 729
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : février 2005
    Messages : 4 729
    Points : 11 143
    Points
    11 143
    Par défaut
    OK.

    Merci pour votre retour et votre solution.

    Je la trouve un peu trop bricolage pour moi.

    Si vous ajoutez un contrôle qui change la "séquence Tab" de votre formulaire, CABOOM !
    Si une entrée clavier arrive entre ces bidouilles, CABOOM !
    etc...

    Je ne comprends pas pourquoi faire une approche aussi complexe quand le controle à activer doit juste être le dernier de la liste "Controls" de votre "FlowLayoutPanel1".

    Si vous pouvez poster le code de la form et de l'user-controle pour vérifier pourquoi la solution "évidente" ne fonctionne pas, ça serait pas mal.

  9. #9
    Candidat au Club
    Femme Profil pro
    Analyse système
    Inscrit en
    septembre 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : septembre 2018
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Re Bacelar,

    Je sais bien que c'est du bricolage mais après c'est vraiment pour dépanner.
    Le programme est censé tourner sur avec juste un scanner en main et donc pas de risque d'appuyer sur un touche pendant la microseconde ou le programme envoi le Shift TAB.
    Après il faut jamais dire jamais

    Mais bon, j'ai tellement chercher pour réussir a faire se truc minable que cela me convient.
    Même si je te fais un copier coller du code de mon usercontrol, cela te ferais très mal au yeux je penses.

    Après je suis sur qu'il doit y avoir un bête code qui pourrait permettre de sélectionner le dernier control du flowlayoutpanel mais je n'en trouve pas.
    J'ai trouvé le code que j'ai posté ci-dessus mais je n'arrive pas à l'adapter à mes besoins.

    En tout cas merci quand même !

  10. #10
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    février 2005
    Messages
    4 729
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : février 2005
    Messages : 4 729
    Points : 11 143
    Points
    11 143
    Par défaut
    A l'arrache :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
          If (Form1.FlowLayoutPanel1.Controls.Length > 0) Then
              Form1.FlowLayoutPanel1.Controls(Form1.FlowLayoutPanel1.Controls.Length-1).Select()
          End If

  11. #11
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    septembre 2005
    Messages
    27 014
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2005
    Messages : 27 014
    Points : 40 093
    Points
    40 093
    Par défaut
    Citation Envoyé par bacelar Voir le message
    A l'arrache :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
          If (Form1.FlowLayoutPanel1.Controls.Length > 0) Then
              Form1.FlowLayoutPanel1.Controls(Form1.FlowLayoutPanel1.Controls.Length-1).Select()
          End If
    +1

    Ou pour étendre avec le coup de la TextBox, un truc de ce genre:
    Code VB.Net : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    	If (Form1.FlowLayoutPanel1.Controls.Length > 0) Then
    		Dim lastControl As UserControl1
    		lastControl = CType(UserControl1, Form1.FlowLayoutPanel1.Controls(Form1.FlowLayoutPanel1.Controls.Length-1))
    		lastControl.textBox1.Select()
    	End If
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  12. #12
    Candidat au Club
    Femme Profil pro
    Analyse système
    Inscrit en
    septembre 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : septembre 2018
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Merci beaucoup pour vos réponses mais bien évidement je n'ai pu m'empêcher d'essayer à l'instant

    Et le problème est que Length n'est pas un membre de Control.ControlCollection.

  13. #13
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    février 2005
    Messages
    4 729
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : février 2005
    Messages : 4 729
    Points : 11 143
    Points
    11 143
    Par défaut
    Ok, mon code "à l'arrache" était basé sur votre code et fait à l'arrache donc.
    Comme on n'arrête pas le progrès, la propriété Count de Control.ControlCollection à dégager depuis .NET2.0, mais on va pas s'arrêter pour si peu.

    Toujours à l'arrache, mais en ayant un peu plus lu la documentation (ce que vous devriez aussi faire ) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
          Dim ctrls() As Control = Form1.FlowLayoutPanel1.Controls.Find("usercontrol1", False)
     
          If (ctrls.Length > 0) Then
              ctrls(ctrls.Length-1).Select()
          End If

  14. #14
    Candidat au Club
    Femme Profil pro
    Analyse système
    Inscrit en
    septembre 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : septembre 2018
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Bonjour Bacelar,

    Cette commande là je l'avais déjà essayé et elle ne fonctionnait pas.
    Je l'avais déjà inscrite plus haut

    Mais pour être sur j'ai quand même essayer à nouveau et PAF ça fonctionne toujours pas
    Mais bon c'est pas gràve, j'ai toujours mon plan B pour l'instant.

    Bonne journée !

  15. #15
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    février 2005
    Messages
    4 729
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : février 2005
    Messages : 4 729
    Points : 11 143
    Points
    11 143
    Par défaut
    Cette commande là je l'avais déjà essayé et elle ne fonctionnait pas.
    C'est à dire ?
    Utilisez un débogueur.
    Ça aussi simple que "usercontrol1" n'est pas le nom de vos contrôles, etc...
    Le débogueur est ton ami.

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

Discussions similaires

  1. [VB.net] Donner le focus a un Form
    Par Manix dans le forum Windows Forms
    Réponses: 23
    Dernier message: 01/08/2005, 02h59
  2. Donner le focus à un JPanel dans un autre JPanel
    Par Azanael dans le forum Agents de placement/Fenêtres
    Réponses: 17
    Dernier message: 21/06/2005, 23h34
  3. donner le focus sur un composant dont la fenetre est invisib
    Par yoghisan dans le forum Composants VCL
    Réponses: 12
    Dernier message: 17/06/2005, 16h27
  4. [debutant]donner le focus
    Par adilou1981 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 07/06/2005, 17h30
  5. Réponses: 4
    Dernier message: 18/05/2005, 14h08

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