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

cycle des evenements sur les checkbox

6 réponses
Avatar
jerome
Bonjour,

J'ai une CheckBox sur lequel il y a un evenement

Private Sub chkBox_Click()
If chkBox = 1 Then
msgbox "...'
End If
End Sub

Le problème est que cet evenement se declenche au chargement du formulaire.
Comme si le cycle du chkBox_Click() était appelé.

Quelqu'un peut-il m'expliquer comment cela fonctionne et comment éviter cela
?

Et existe-t-il un moyen de rendre une CheckBox non saisissable autrement
qu'en mettant enable=false ?
Le problème est que ça n'est pas très lisible lorsque enable=false.
Après il faut jouer avec les back color mais àa me semble un peu lourd...

Quelque chose du style locked=true

Merci.
Bonne journée

6 réponses

Avatar
Jacques93
Bonjour jerome,
jerome a écrit :
Bonjour,

J'ai une CheckBox sur lequel il y a un evenement

Private Sub chkBox_Click()
If chkBox = 1 Then
msgbox "...'
End If
End Sub

Le problème est que cet evenement se declenche au chargement du formulaire.
Comme si le cycle du chkBox_Click() était appelé.

Quelqu'un peut-il m'expliquer comment cela fonctionne et comment éviter cela
?



Cela peu s'expliquer, si par exemple, dans le chargement du formulaire
tu affectes une valeur à la propriété 'Value' (qui est la propriété par
défaut) du CheckBox. Cela déclenchera, l'événement 'Click' :

Private Sub Check1_Click()
' Lors du Load le contrôle n'est pas visible, on sort
If Check1.Visible = False Then Exit Sub
If Check1.Value = 1 Then
MsgBox "..."
End If
End Sub

Private Sub Form_Load()
' Génère l'événement Click
Check1.Value = 1
End Sub


Et existe-t-il un moyen de rendre une CheckBox non saisissable autrement
qu'en mettant enableúlse ?
Le problème est que ça n'est pas très lisible lorsque enableúlse.
Après il faut jouer avec les back color mais àa me semble un peu lourd...

Quelque chose du style locked=true




Je ne pense pas qu'il y ait de solution idéale. Dès qu'on veut
s'éloigner des standards de l'interface avec les composants de base, on
finit alourdir les choses, et par définition on ne respecte plus ces
standards.

Pour ce cas une solution relativement simple consiste à avoir un
CheckBox sans 'Caption', et de positionner un contrôle Label à côté,
ainsi, seul la case sera affectée par Enabled = False, pas le texte.

--

Cordialement,

Jacques.
Avatar
Jacques93
Jacques93 a écrit :



[...]
Private Sub Check1_Click()
' Lors du Load le contrôle n'est pas visible, on sort
If Check1.Visible = False Then Exit Sub
If Check1.Value = 1 Then
MsgBox "..."
End If
End Sub

Private Sub Form_Load()
' Génère l'événement Click
Check1.Value = 1
End Sub




J'oubliai, si tu modifies la propriété Value du CheckBox ailleurs dans
le code, cela aura le même effet, cad déclenchement de l'événement
Click. Et dans ce cas le test sur Visible ne servira à rien. Tu peux
dans ce cas utiliser une variable booléenne pour ne pas exécuter le code
l'événement Click.

--

Cordialement,

Jacques.
Avatar
jerome
Merci bien.

Je vais essayer comme ça.
Mon formulaire est déjà chargé lorque la CheckBox est alimentée.
Donc le test sur le load n'est pas pertinent.

Je vais mettre une variable booleenne pour le test.
Ou un LostFocus


"Jacques93" wrote in message
news:
Jacques93 a écrit :
>
[...]
> Private Sub Check1_Click()
> ' Lors du Load le contrôle n'est pas visible, on sort
> If Check1.Visible = False Then Exit Sub
> If Check1.Value = 1 Then
> MsgBox "..."
> End If
> End Sub
>
> Private Sub Form_Load()
> ' Génère l'événement Click
> Check1.Value = 1
> End Sub
>

J'oubliai, si tu modifies la propriété Value du CheckBox ailleurs dans
le code, cela aura le même effet, cad déclenchement de l'événement
Click. Et dans ce cas le test sur Visible ne servira à rien. Tu peux
dans ce cas utiliser une variable booléenne pour ne pas exécuter le code
l'événement Click.

--

Cordialement,

Jacques.
Avatar
at
jerome avait prétendu :
Bonjour,

J'ai une CheckBox sur lequel il y a un evenement

Private Sub chkBox_Click()
If chkBox = 1 Then
msgbox "...'
End If
End Sub

Le problème est que cet evenement se declenche au chargement du formulaire.
Comme si le cycle du chkBox_Click() était appelé.

Quelqu'un peut-il m'expliquer comment cela fonctionne et comment éviter cela
?

Et existe-t-il un moyen de rendre une CheckBox non saisissable autrement
qu'en mettant enableúlse ?
Le problème est que ça n'est pas très lisible lorsque enableúlse.
Après il faut jouer avec les back color mais àa me semble un peu lourd...

Quelque chose du style locked=true

Merci.
Bonne journée



Pour compléter la réponse de Jacques, il y a l'évènement MouseDown

Private Sub Check1_MouseDown(Button As Integer, Shift As Integer, X As
Single, Y As Single)

'
' code
'
End Sub



qui contrairement à Check1_Click n'est pas appelé quand dans le code tu
changes la valeur de check1. Si j'ai bien compris, c'est ça le
problème.

A+
Avatar
LE TROLL
Bonjour par exemple

dim debut as boolean
sub load_form
debut = false
' OU tu donnes le focus à un check qui ne va pas afficher de message
end sub

sub activate_form
if debut = true then exit sub
debut = true
end sub

sub checkBox_click
if debut = false then exit sub
end sub

Une grande partie des objets à click réagissent au Load, ils font mieux, il
suffit dans certain cas d'appeler un bojet sur une form fermée pour qu'elle
se charge (ComboBox) par exemple, donc il faut prendre garde de tester
l'activation (affichage), afin que les clicks ne lancent rien avant.


Cordialement ;o)
-
Logiciels, romans, contacts : http://irolog.free.fr
_______________________
.
.


"jerome" a écrit dans le message de
news:
Bonjour,

J'ai une CheckBox sur lequel il y a un evenement

Private Sub chkBox_Click()
If chkBox = 1 Then
msgbox "...'
End If
End Sub

Le problème est que cet evenement se declenche au chargement du
formulaire.
Comme si le cycle du chkBox_Click() était appelé.

Quelqu'un peut-il m'expliquer comment cela fonctionne et comment éviter
cela
?

Et existe-t-il un moyen de rendre une CheckBox non saisissable autrement
qu'en mettant enableúlse ?
Le problème est que ça n'est pas très lisible lorsque enableúlse.
Après il faut jouer avec les back color mais àa me semble un peu lourd...

Quelque chose du style locked=true

Merci.
Bonne journée



Avatar
Driss HANIB
Bonjour

Pour ma part aux deux questions voici comment jke fais
1. Evenement Load

je fais comme LE TROLL je crée une variable initialisation que je mets à
vrai au début de Form_Load

Puis dans l'évènement chkBox_Click()
je mets

if not initialisation thne*
' mon action est ici
end if


2. pour rendre non modifiable un checkBox dans utiliser Enabled = true, en
fait je mets le checkBox dans un frame, avce border=0 (pas de bordure)

et je fais Frame1.enabledúlse

Ainsi tous les controles contenus dasn ce Frame, deviennent inaccessibles
mais restent bien de la couleur iniotiale.

Driss
"Jacques93" a écrit dans le message de news:
OH$
Bonjour jerome,
jerome a écrit :
Bonjour,

J'ai une CheckBox sur lequel il y a un evenement

Private Sub chkBox_Click()
If chkBox = 1 Then
msgbox "...'
End If
End Sub

Le problème est que cet evenement se declenche au chargement du
formulaire.
Comme si le cycle du chkBox_Click() était appelé.

Quelqu'un peut-il m'expliquer comment cela fonctionne et comment éviter
cela
?



Cela peu s'expliquer, si par exemple, dans le chargement du formulaire tu
affectes une valeur à la propriété 'Value' (qui est la propriété par
défaut) du CheckBox. Cela déclenchera, l'événement 'Click' :

Private Sub Check1_Click()
' Lors du Load le contrôle n'est pas visible, on sort
If Check1.Visible = False Then Exit Sub
If Check1.Value = 1 Then
MsgBox "..."
End If
End Sub

Private Sub Form_Load()
' Génère l'événement Click
Check1.Value = 1
End Sub


Et existe-t-il un moyen de rendre une CheckBox non saisissable autrement
qu'en mettant enableúlse ?
Le problème est que ça n'est pas très lisible lorsque enableúlse.
Après il faut jouer avec les back color mais àa me semble un peu lourd...

Quelque chose du style locked=true




Je ne pense pas qu'il y ait de solution idéale. Dès qu'on veut s'éloigner
des standards de l'interface avec les composants de base, on finit
alourdir les choses, et par définition on ne respecte plus ces standards.

Pour ce cas une solution relativement simple consiste à avoir un CheckBox
sans 'Caption', et de positionner un contrôle Label à côté, ainsi, seul la
case sera affectée par Enabled = False, pas le texte.

--

Cordialement,

Jacques.