Bonjour,
j'ai un TCheckListBox.
Est il possible de faire en sorte que la case soit cochée/décochée systématiquement lorsque l'on clique sur le texte de la checkBox et non pas uniquement si on clique dans le carré de la checkBox?
merci !!
Pascale38
Bonjour,
j'ai un TCheckListBox.
Est il possible de faire en sorte que la case soit cochée/décochée systématiquement lorsque l'on clique sur le texte de la checkBox et non pas uniquement si on clique dans le carré de la checkBox?
merci !!
Pascale38
Bonjour,
En faisant un toogle sur l'event onClick ?
Je veux bien mais je ne sais pas ce qu'est un toogle ?![]()
La méthode pour switcher la valeur de la ta checkbox par code.
C'est peut-être pas toogle, mais checked ou setchecked(bool)...
Oui justement j'aimerai savoir comment je peux récupérer lequel item est cliqué (ou selectionné) afin de "checker" la case correspondante.
mais je ne vois pas comment faire ça, j'ai bien l’événement onClick, mais après comment retrouver l'item clické ?
Je sèche... merci !
Salut, je ne comprends pas ta question. Par défaut un checkbox Windows toggle la sélection quand on clique sur le Caption du TCheckBox. Est-ce que tu parles d'un projet VCL?
Edit 1: je viens de voir que tu parles d'un TCheckListBox et non d'un TCheckBox.
Edit 2: dans l'évènement OnMouseDown du TCheckListBox il faut ajouter le code suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 TCheckListBox* LCheckListBox = static_cast<TCheckListBox*>(Sender); TPoint LPoint = Point(X, Y); int LPos = LCheckListBox->ItemAtPos(LPoint, true); if(LPos >= 0) { LCheckListBox->Checked[LPos] = !LCheckListBox->Checked[LPos]; }
Merci Crayon,
et oui bizarrement le TCheckListBox ne fonctionne pas comme un TCheckBox, ce qui est ennuyeux car pas toujours évident pour l'utilisateur de cliquer
exactement dans la case, surtout quan dil n'a pas de souris (ce qui est majoritairement le cas des utilisateurs de notre appli).
Super ton code, ça marche pas mal du tout
Problème maintenant c'est que si on clique sur la case ça n'a pas d'effet, car en fait le code du mouse down annule le check
Je regarde comment inhiber le check du coup !?
Bonjour
Pourquoi ne pas utiliser une simple listbox avec selection multiple et pression de la touche control des qu on entre sur le composant et relachement à la sortie ?
ListBox1->MultiSelect = true ;
//---------------------------------------------------------------------------
void __fastcall TForm1::ListBox1Enter(TObject *Sender)
{
keybd_event(VK_CONTROL, 0, 0, 0) ;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ListBox1Exit(TObject *Sender)
{
keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
}
//---------------------------------------------------------------------------
cedni merci pour ta proposition, mais il me faut des cases à cocher...![]()
Sinon, il y a le TListView avec la propriété Checkboxes à true![]()
Pour régler ce problème tu peux créer une classe dans ton fichier .h qui sert à exposer la méthode GetCheckWidth qui est protected.
Ensuite tu utilises ce code dans l'évènement OnMouseDown du TCheckListBox:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 class TMyCheckListBox : public TCheckListBox { typedef TCheckListBox inherited; public: int __fastcall CheckBoxWidth() { return inherited::GetCheckWidth(); } };
Il existe une réponse plus complexe ici si celle-ci en te conviens pas: https://stackoverflow.com/questions/...e-on-that-item
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 TMyCheckListBox* LCheckListBox = static_cast<TMyCheckListBox*>(Sender); if(X > LCheckListBox->CheckBoxWidth()) { TPoint LPoint = Point(X, Y); int LPos = LCheckListBox->ItemAtPos(LPoint, true); if(LPos >= 0) { LCheckListBox->Checked[LPos] = !LCheckListBox->Checked[LPos]; } }
Merci Crayon !!
Pour le TListView, ben le comportement est le même en fait, ça se coche pas quand le texte est sélectionné...
je vais voir ton autre solution.
merci !!
Super ça marche bien, merci !!
En plus j'ai le choix entre plusieurs solutions, c'est Noël avant l'heure !!
merci![]()
Partager