Bonjour,
Dans un formulaire, j’aimerai “empêcher” ou annuler l’action de fermeture.
Peux t on accéder à ce bouton pour l’activer/désactiver (enabled/disabled).
J’ai essayé avec une fonction qui retourne False, mais ça ne marche pas le formulaire se ferme.
Voici plusieurs jours que je cherche mais je ne trouve pas de solution. je n’ai pas trouvé de réponse claire à ce problème. Il me semble que MSAcces permettait de le faire. Est-ce vraiment impossible avec OOo et LO ?
Merci pour votre réponse
Ouvrir_Fenetre.odb (13.1 KB)
Bonjour @reginacoco
Je m’interroge sur le pourquoi ? Si l’utilisateur clique pour fermer… il désire fermer. J’ai l’impression que tu veux tout “boucler”, tout contrôler (cf. taille, et position des écrans). Pour moi l’utilisateur doit pouvoir gérer ses fenêtres comme il veut.
Cela dit, via les événements “formulaire” j’avais fait de nombreux essais il y a longtemps et dans mon souvenir rien de fructueux, même en suivant la piste création d’un listener (peut-être voir du côté de python au lieu de basic ?).
Dans ton optique “tout contrôle” tu pourrais utiliser des dialogues à la place de formulaires mais dans ce cas il faut gérer complètement l’accès aux données.
Cordialement
Bonsoir @PYS
Non et Oui dans le cas précis (pas celui de la base que j’ai jointe) l’utilisateur après avoir saisi plusieurs lignes de (factures, commandes …) doit valider ces lignes en cliquant sur un bouton “Valider” … Je ne sais pas comment faire pour l’obliger du moins lui faire penser qu’il ne faut pas fermer tant que sa saisie n’est pas “Validée” et surtout ne pas fermer la fenêtre sans avoir “Validé” pour ce qui est des tailles et position c’est plus par souci d’esthétique
Si je me souvient bien (il quelques dizaines d’années) avec MSAcces on pouvait directement intervenir sur les objets de la barre de titre.
Ceci dit ta réponse ne donne pas beaucoup d’espoir à moins d’envoyer un message du genre “Voulez-vous valider votre saisie…” à chaque enregistrement de ligne … c’est pas très top au niveau ergonomie et esthétique et convivialité
Merci encore … Je vais cogiter
J’ai trouvé ce lien où tu es cité il y a 12 ans
https://forum.openoffice.org/fr/forum/viewtopic.php?f=8&t=21133&hilit=CloseVetoException
Ce lien de 2018 ou rien n’est résolu
https://forum.openoffice.org/fr/forum/viewtopic.php?p=316928#p316888
Et ceci qui ne donne rien non plus (ou mon anglais n’est n’est pas assez bon)
https://forum.openoffice.org/en/forum/viewtopic.php?t=29125#p132719
C’est quand même bizarre que personne ne soit arrivé à résoudre ce problème !!!
Il y a même des posts sur d’autre forums pour lesquels personne ne répond.
Doit bien y avoir chez LO quelqu’un qui sait faire ça !
Je suis vraiment … dépité
Bonne semaine à tous
Je ne suis pas utilisateur du module base. Tous mes “posts” relatifs à ce module vis(ai)ent à répondre à des questions, comme sur ce site. N’étant pas plus intéressé que cela par la question (pour la raison déjà donnée) je n’y ai plus passé de temps depuis.
Tu pourrais poser la question sur notre instance anglophone (en anglais donc, même rudimentaire ; je m’aide des sites de traduction en ligne moi-même). D’autres ont pu creuser la question, notamment via le langage python.
Une autre piste à explorer dans l’exemple joint : Ouvrir_Fenetre.odb (13,3 Ko)
…
- J’utilise l’événement Sous-document chargé au niveau de la base pour initialiser une variable globale.
- Au niveau du formulaire, utilisation de l’événement Ouvrir pour modifier l’état de cette variable.
- Dans le formulaire un bouton Valider lance une macro rétablissant la variable globale.
- L’événement Sous-document fermé de la base lance une macro contrôlant l’état de la variable. Si on ferme le formulaire sans avoir cliqué sur Valider le programme rouvre le formulaire.
Tout cela serait à raffiner (changement de l’état de la variable uniquement si on a saisi par ex.)
Autre aspect des choses : si la validation est fonctionnellement requise, ne manque-t’il pas un champ booléen dans lequel stocker l’état ?
Cordialement
Merci Pierre-Yves.
J’avais déjà œuvré dans ce sens mais si on valide le formulaire se ferme, et tu ré-ouvre le formulaire ce n’est pas tout à fait le but recherché.
J’ai essayé en "forçant " la propriété monFormulaire.isModified = False/True
*False dans l’évènement formulaire “après enregistrement”, la demande de fermeture(par la X) est intercepté par LO “vous avez modifié des données…” voulez vous continuer Annul/Oui/Non
si on annule c’est parfait le formulaire reste ouvert au bon endroit.
si on répond Oui ou Non le formulaire se ferme.
Il faudrait donc pouvoir “intercepter” ce message pour invalider par exemple les réponses OUI/NON
Je vais essayer de poser la question aux anglais.
Je pense qu’il devrait y avoir une piste du coté de ce Listener
le tout est de savoir comment on peut (et ou) " throwing CloseVetoException " dans la gestion du Listener
A bientôt
Cordialement.