Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Detection du bouton à l'origine de l'action

5 réponses
Avatar
Christophe CAMPAIN
Bonjour à tous,

Admettons que 3 bouttons différents déclenchent la même procédure ; comment
faire pour savoir quel bouton est à l'origine de l'action ?

Par avance merci,

Kristof

5 réponses

Avatar
Raymond [mvp]
Bonjour.

tu peux utiliser:
Screen.ActiveControl.Name
sauf si le focus a été mis ailleurs entre-temps. bien tester cette valeur en
sortie immédiate du bouton.

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Christophe CAMPAIN" a écrit
dans le message de news:
Bonjour à tous,

Admettons que 3 bouttons différents déclenchent la même procédure ;
comment

faire pour savoir quel bouton est à l'origine de l'action ?

Par avance merci,

Kristof




Avatar
Anor
Bonjour,

Christophe CAMPAIN wrote:
| Bonjour à tous,
|
| Admettons que 3 bouttons différents déclenchent la même procédure ;
| comment faire pour savoir quel bouton est à l'origine de l'action ?
|
| Par avance merci,
|
| Kristof
c'est le contrôle qui a le focus juste avant l'exécution de la procédure :

extrait de l'aide :

Dim ctlCurrentControl As Control
Dim strControlName As String


Private Sub Command0_Click()
Set ctlCurrentControl = Screen.ActiveControl
strControlName = ctlCurrentControl.name
msgbox strControlName
'Call TaProcédure()
End Sub
Avatar
Christophe CAMPAIN
Salut Raymond,

C'est cette soluce que j'avais testée en 1er, mais il semble que chez moi
cela ne s'applique qu'aux contrôles qui peuvent recevoir un focus (me renvoi
tjrs le nom du dernier bouton utilisé, et pas du contrôle image qui
déclenche l'action...)
Mon formulaire contiens plusieur contrôles images et je cherche à détecter
celui sur lequel on clique avec la souris pour l'encadrer de rouge . Ma
procédure actuelle est :
'----------------------
Private Sub Image1_Click()
Dim Ctl As Control
' RAZ des mises en forme des contrôles image
For Each Ctl In Me
If Ctl.ControlType = 103 Then 'Si c'est un cadre image
With Ctl
.BorderColor = RGB(0, 0, 0)
.BorderWidth = 0
End With
End If
Next Ctl

With Image1 'C'set là qu'il me faudrait le nom du cadre image sur lequel on
viens de cliquer
.BorderColor = RGB(255, 0, 0)
.BorderWidth = 1
End With
End Sub
'-------------------------

Ca marche, mais s'il faut remettre ça pour chaque contrôle image, c'est un
peu lourd comme méthode.
C'est pourquoi je cherche à détecter le contrôle image sur lequel on clique
pour appeler ma procédure, comme ça peu importe le nombre de contrôles
images...

Merci pour ton aide

@+
Kristof


"Raymond [mvp]" a écrit dans le message de
news:uHYw%
Bonjour.

tu peux utiliser:
Screen.ActiveControl.Name
sauf si le focus a été mis ailleurs entre-temps. bien tester cette valeur
en

sortie immédiate du bouton.

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Christophe CAMPAIN" a écrit
dans le message de news:
Bonjour à tous,

Admettons que 3 bouttons différents déclenchent la même procédure ;
comment

faire pour savoir quel bouton est à l'origine de l'action ?

Par avance merci,

Kristof








Avatar
Raymond [mvp]
exact, si tu cliques sur une image, le focus ne se déplace pas et tu ne peux
pas utiliser l'objet screen.
tu est obligé d'indiquer le nom de l'image dans la passation à ta fonction:
dans événement click de l'image 1 tu mets:
=Mafonction("image1")

dans mafonction qui sera comme ceci:
Public Mafonction( Nomimage as string) as Boolean
tu récupèreras le nom de ton image.

(ce n'était pas l'objet de ta question d'origne, petit canaillou (3
boutons))

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Christophe CAMPAIN" a écrit
dans le message de news:
Salut Raymond,

C'est cette soluce que j'avais testée en 1er, mais il semble que chez moi
cela ne s'applique qu'aux contrôles qui peuvent recevoir un focus (me
renvoi

tjrs le nom du dernier bouton utilisé, et pas du contrôle image qui
déclenche l'action...)
Mon formulaire contiens plusieur contrôles images et je cherche à détecter
celui sur lequel on clique avec la souris pour l'encadrer de rouge . Ma
procédure actuelle est :
'----------------------
Private Sub Image1_Click()
Dim Ctl As Control
' RAZ des mises en forme des contrôles image
For Each Ctl In Me
If Ctl.ControlType = 103 Then 'Si c'est un cadre image
With Ctl
.BorderColor = RGB(0, 0, 0)
.BorderWidth = 0
End With
End If
Next Ctl

With Image1 'C'set là qu'il me faudrait le nom du cadre image sur lequel
on

viens de cliquer
.BorderColor = RGB(255, 0, 0)
.BorderWidth = 1
End With
End Sub
'-------------------------

Ca marche, mais s'il faut remettre ça pour chaque contrôle image, c'est un
peu lourd comme méthode.
C'est pourquoi je cherche à détecter le contrôle image sur lequel on
clique

pour appeler ma procédure, comme ça peu importe le nombre de contrôles
images...

Merci pour ton aide

@+
Kristof


Avatar
Christophe CAMPAIN
Toutes mes excuses...

En effet, au début je ne voulais pas entrer trop dans les détails...
Je voulais une soluce de principe pour pouvoir l'appliquer moi même...
Je m'aperçois que ce n'est pas aussi simple que je me l'imaginais.

Ta soluce me semble correspondre à ce que je cherche à faire (en tout cas
pour le moment, car par la suite je cherche à pouvoir créer/ supprimer
autant de ctl image que je souhaite sur mon formulaire --> il faudra donc
que je puisse associer ce petit bout de code (=Mafonction("image1") ) à
chaque création de ctl image...
Mais je verrai ça un peu plus tard, pour le moment je vais mettre en
application...

Merci
@+
Kristof

"Raymond [mvp]" a écrit dans le message de
news:uw6NJ$
exact, si tu cliques sur une image, le focus ne se déplace pas et tu ne
peux

pas utiliser l'objet screen.
tu est obligé d'indiquer le nom de l'image dans la passation à ta
fonction:

dans événement click de l'image 1 tu mets:
=Mafonction("image1")

dans mafonction qui sera comme ceci:
Public Mafonction( Nomimage as string) as Boolean
tu récupèreras le nom de ton image.

(ce n'était pas l'objet de ta question d'origne, petit canaillou (3
boutons))

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Christophe CAMPAIN" a écrit
dans le message de news:
Salut Raymond,

C'est cette soluce que j'avais testée en 1er, mais il semble que chez
moi


cela ne s'applique qu'aux contrôles qui peuvent recevoir un focus (me
renvoi

tjrs le nom du dernier bouton utilisé, et pas du contrôle image qui
déclenche l'action...)
Mon formulaire contiens plusieur contrôles images et je cherche à
détecter


celui sur lequel on clique avec la souris pour l'encadrer de rouge . Ma
procédure actuelle est :
'----------------------
Private Sub Image1_Click()
Dim Ctl As Control
' RAZ des mises en forme des contrôles image
For Each Ctl In Me
If Ctl.ControlType = 103 Then 'Si c'est un cadre image
With Ctl
.BorderColor = RGB(0, 0, 0)
.BorderWidth = 0
End With
End If
Next Ctl

With Image1 'C'set là qu'il me faudrait le nom du cadre image sur lequel
on

viens de cliquer
.BorderColor = RGB(255, 0, 0)
.BorderWidth = 1
End With
End Sub
'-------------------------

Ca marche, mais s'il faut remettre ça pour chaque contrôle image, c'est
un


peu lourd comme méthode.
C'est pourquoi je cherche à détecter le contrôle image sur lequel on
clique

pour appeler ma procédure, comme ça peu importe le nombre de contrôles
images...

Merci pour ton aide

@+
Kristof