Delphes. Comment Désactiver/Activer les contrôles sans déclenchement des contrôles événements
J'ai un DataSet (TZQuery
), qui a plusieurs champs booléens, qui ont TDBCheckBoxes affecté.
Ces Cases ont "OnClick
" des événements qui leur sont confiées et qu'ils sont déclenchés à chaque fois que je change les valeurs de champ (qui sont affectés à des cases à cocher).
Le problème est que je n'ai pas besoin de ces événements triggerred, au cours de nombreuses opérations-je faire avec le jeu de données.
J'ai essayé d'appeler DataSet.DisableControls
, mais c'est que les événements sont appelés juste après que j'ai appeler DataSet.EnableControls
.
Donc ma question est existe - il un moyen pour désactiver le déclenchement de contrôles de bases de Données des événements.
Modifier (image plus grande):
Si une exception se produit pendant disons que l'enregistrement de données, je dois charger les valeurs par défaut (ou les valeurs que j'ai eu avant de l'enregistrer). Maintenant, lors du chargement des données, tous ces événements (TDBCheckBoxes et d'autres contrôles de bases de données) sont déclenchées, qui font toutes sortes d'activités qui créent des gal et parfois même des changements non désirés de données, je suis à la recherche d'une solution universelle de la désactivation de tous pour une courte période de temps.
- Si vous utilisez des listes d'actions alors vous pouvez tout simplement désactiver l'action de la liste, tandis que la mise à jour de la base de données
- puis ne pas utiliser DB contrôles connaissance et de faire le lien entre vous-même...
Vous devez vous connecter pour publier un commentaire.
Bâtiment sur Guillem du post:
Désactiver tout:
Traverser chaque composant sur la forme avec la boucle for, illustré ci-dessous, la modification des propriétés à la valeur désirée.
Si vous voulez plus tard, revenir en arrière à l'original des valeurs de propriété, alors vous devez enregistrer la valeur d'origine (comme OldEvent est utilisée ci-dessous.)
Modifier: Le code ci-dessous illustre le concept clé en cours de discussion. Si des éléments sont ajoutés ou supprimés au moment de l'exécution, ou si vous voulez absolument utiliser le moins de mémoire, puis d'utiliser un tableau dynamique, et comme Pieter suggère, stocker des pointeurs vers les composants plutôt que de l'indexation pour eux.
Revenir à d'anciennes valeurs
Il y a peut être un moyen de plier tous les cas relevés dans un test générique que les réponses "Ne cette composante ont un OnClickEvent" -- mais je ne sais pas ce que c'est.
J'espère que quelqu'un va critiquer de manière constructive ma réponse (plutôt que juste en bas à droit de vote de ce dernier.) Mais, nous l'espérons ce que j'ai indiqué ci-dessus sera réalisable.
Une façon de le faire est la suivante:
HTH
La conception interne de la
TCustomCheckBox
est qu'il déclenche laClick
méthode à chaque fois leChecked
de la propriété en cas de changement. Soit en cliquant dessus ou en le choisissant dans le code. Et c'est ce qui se passe ici lorsque vous appelezEnableControls
parce que le contrôle est mis à jour pour afficher la valeur du champ relié dans votre jeu de données.TButtonControl
(qui est ce queTCustomCheckBox
hérite de) a la propriétéClicksDisabled
. Utiliser ce lieu de (ou en plus) de la DisableControls/EnableControls appel. Malheureusement, il est protégé et ne peut être rendue publique parTCustomCheckBox
mais vous pouvez utiliser un petit hack pour y accéder:Bien sûr, vous pouvez mettre ceci dans une méthode qui vérifie tous les composants et les ensembles de cette propriété si le contrôle hérite de
TCustomCheckBox
ou d'autres critères.