Récupérer le contrôle possèdant le focus

DBugs Messages postés 10 Date d'inscription mercredi 8 août 2007 Statut Membre Dernière intervention 21 janvier 2008 - 22 nov. 2007 à 19:43
DBugs Messages postés 10 Date d'inscription mercredi 8 août 2007 Statut Membre Dernière intervention 21 janvier 2008 - 22 nov. 2007 à 22:13
Salut à tous,
Cela fait trois jour que je cherche sans trouver alors je vais simplement poser la question.
J'ai plusieurs "button" regroupés dans un "groupBox", tous ces boutons vont la même chose à leur valeur respective près (par exemple que je clic sur 2 ou que je clique sur 5 le logiciel va ajouter 2 ou 5 (selon le cas) à une variable) je veux donc éviter de rentrer 36 le même le code sur les différents boutons, j'ai trouvé un début de solution : je met le code dans le groupBox_Enter, ainsi je peux cliquer sur n'importe quel bouton le code s'exectura (du moins seulement la première fois car une fois rentrer on ne rentre plus mais ça c'est un autre problème) mon problème c'est que je ne trouve rien pour récupéré le contrôle sur lequel j'ai cliqué, pour récupérer la bonne valeur (2 ou 5).

En faite j'ai réussi en cherchant parmis tous les boutons (avec un foreach) celui qui avait le focus mais ça me plait pas vraiment. Je cherche en quelque sorte à récupéré le contrôle qui a le focus sans avoir à parcourir tous les contrôles mais est-ce possible? si oui comment?

Merci d'avance pour les réponses.

Petit étudiant, grand débutant.

8 réponses

MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
22 nov. 2007 à 20:09
Salut,

Le parametre sender de ton evenement te permet de savoir quel Control a executé l'evenement.
Il te suffit de le caster en button :

Button btn = sender as Button
if(btn != null)
{
   // Ton code
}

Mx
MVP C# 
0
DBugs Messages postés 10 Date d'inscription mercredi 8 août 2007 Statut Membre Dernière intervention 21 janvier 2008
22 nov. 2007 à 20:19
Pas bête mais je viens d'essayer et ça marche pas car l'objet sender et mon groupBox dans le quel j'entre et pas le button sur lequel je clique :(
0
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
22 nov. 2007 à 20:25
Inscris toi a l'évenement click de tes boutons, mais en indiquant toujours la meme méthode :)

Mx
MVP C# 
0
DBugs Messages postés 10 Date d'inscription mercredi 8 août 2007 Statut Membre Dernière intervention 21 janvier 2008
22 nov. 2007 à 20:33
tu veux dire crée une méthode/fonction que je place dans tous mes buttonI_click?
je voudrais justement éviter de devoir mettre du code dans tous les buttons click.

Il n'y vraiment pas un truc tous fait qui permet de récupérer l'objet qui a le focus?, c'est bizard ça voudrait dire que le logiciel lui même ne sais pas où le focus alors qu'en faisant tab il passe on contrôle suivant ce qui sous entend qu'il sait où il est (ensuite il regarde le tabset et passe au suivant jepense non?)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
22 nov. 2007 à 20:39
Tu peux tout a fait reutiliser la meme méthode pour chaque evenement click !
Pas besoin de reecrire la meme méthode pour chaque bouton

Mx
MVP C# 
0
DBugs Messages postés 10 Date d'inscription mercredi 8 août 2007 Statut Membre Dernière intervention 21 janvier 2008
22 nov. 2007 à 20:42
oui mais ce que je voulais dire c'est que ça m'oblige à appeler cette méthode dans chaque évènement clic et je veux éviter de "déclarer" ces évènements.
0
Nikoui Messages postés 794 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 19 août 2008 13
22 nov. 2007 à 20:48
Je suis assez d'accord avec MorpionMx, c'est la solution la plus propre.

Au pire si tu as vraiment la flemme de le faire, tu peux le faire par code. Un bout de code "improvisé" (non testé):

foreach(Control control in myGroupBox.Controls)
{
    Button button = control as Button;
    if(button != null)
    {
       button.Cliked += new EventHandler(maMethode);
    }
}

<hr size="2" width="100%" />
Working as designed
www.nikoui.fr
0
DBugs Messages postés 10 Date d'inscription mercredi 8 août 2007 Statut Membre Dernière intervention 21 janvier 2008
22 nov. 2007 à 22:13
Intéressant, je note.
(Si j'ai bien compris je met ça dans le load de form)

Mais ça correspond pas à ce que je cherche à croire que ça n'existe pas (et ça m'étonne grandement), je pense revenir à ma première solution voir celle que vous me proposer mais du coup mais groupBox devient inutile.

En tout cas je vous remercie pour toute l'attention que vous portez à mon souci.

Et si quelqu'un à une solution pour grouper en un seul code/event les events de plusieurs boutons (genre un buttons_click qui afficherais le text du bouton cliqué) je suis toujours à l'écoute.
0
Rejoignez-nous