[Résolu][Calc] - Focus sur TextField ... activation Checkbox

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
stanol69
NOOuvel adepte
NOOuvel adepte
Messages : 21
Inscription : 04 juin 2015 23:14

[Résolu][Calc] - Focus sur TextField ... activation Checkbox

Message par stanol69 »

Bonsoir,

Ce que je cherche à obtenir :
Je lance mon dialogue qui comprend 3 CheckBox nommées CheckBox1, CheckBox2 et CheckBox3.
Lorsque je clique sur une CheckBox, le TextField "lié" (TextField1, TextField2 et TextField3) devient visible.
Le focus est placé à l'intérieur du TextField correspondant.

Le problème que je rencontre :
Ma petite routine marche bien tant que je coche dans l'ordre croissant.
Par contre, si je coche la CheckBox2, le TextField2 est visible et obtient le focus. Si je coche ensuite la CheckBox1, le TextField1 devient visible mais le focus reste sur le 2.

Comment récupérer le n° de la CheckBox cochée dans une variable pour ainsi "forcer" le focus sur le TextField qui a le même n° ?
Je comprends bien qu'en passant par If then tel que je l'ai fait, c'est tout à fait normal que le focus n'arrive pas sur le TextField1.
Précision : sur mon Dialogue, j'ai en réalité 22 CheckBox qui peuvent être activées.

Code : Tout sélectionner

Sub Enquete_CB_Modifiee
Dim i as integer
For i= 1 to 3
	If DialTest.getControl("CheckBox"& i).state = 1 then
	DialTest.getControl("TextField"& i).visible = true
	DialTest.getControl("TextField"& i).setfocus
	End if		
Next i
End sub
Merci beaucoup
Pièces jointes
textfield lie checkbox.ods
(11.2 Kio) Téléchargé 72 fois
Dernière modification par stanol69 le 10 août 2018 14:32, modifié 1 fois.
LibreOffice 4.3- c'est la version imposée au travail
LibreOffice 5.4.5.1 à la maison
Windows 10
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 09:26

Re: [Calc] - Focus sur TextField lors de l'activation Checkb

Message par Hubert Lambert »

Bonjour,

Quand une macro est appelée depuis un contrôle de dialogue, un argument lui est automatiquement passé, qui fournit de précieuses informations sur le contexte d'exécution de la macro.
En particulier, la propriété "Source" de cette événement pointe vers le contrôle ayant appelé la macro. À partir de celui-ci, il est ensuite possible de remonter au dialogue lui-même et donc aux autres contrôles.
Pour récupérer cet objet, tu procèdes ainsi :

Code : Tout sélectionner

Sub Enquete_CB_Modifiee(event)
    xray event
    [...]
Cordialement.
AOOo 4.1.7 sur Win10
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
| « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
stanol69
NOOuvel adepte
NOOuvel adepte
Messages : 21
Inscription : 04 juin 2015 23:14

Re: [Calc] - Focus sur TextField lors de l'activation Checkb

Message par stanol69 »

Bonsoir,

J'active la CheckBox 2.
Xray se lance et m'indique :
Objet initial : valeur = com.sun.star.awt.ItemEvent
Objet initial.Source : valeur = com.sun.star.uno.XInterface
Objet initial.Source.Model : valeur = com.sun.star.awt.XControlModel
Objet initial.Source.Model.Name : valeur = "CheckBox2"

Du coup, je modifie ma routine et la remplace par :

Code : Tout sélectionner

Dim i as integer
DialTest.Source.Model.Name="CheckBox"& i
DialTest.getControl("TextField"& i).visible = true
DialTest.getControl("TextField"& i).setfocus
J'ai le message d'erreur "Propriété ou méthode non trouvée : Source". Logique, Objet initial Source représente ce qui a déclenché la routine.
Est-ce qu'il faut que je déclare l'évènement dans ma routine ?

J'ai essayé sans succès :
Dim Objet_initial as object
Objet_initial = com.sun.star.awt.ItemEvent

là j'avoue que je sèche complètement,
Merci beaucoup
LibreOffice 4.3- c'est la version imposée au travail
LibreOffice 5.4.5.1 à la maison
Windows 10
Avatar de l’utilisateur
Oukcha
RespOOnsable modération
RespOOnsable modération
Messages : 3929
Inscription : 06 oct. 2008 10:03

Re: [Calc] - Focus sur TextField lors de l'activation Checkb

Message par Oukcha »

Bonjour,
votre signature a écrit : LibreOffice 4.3- c'est la version imposée au travail
LibreOffice 5.4.5.1 à la maison
Votre signature indique que vous disposez d'une version d' OpenOffice qui n'est plus maintenue.
Est-ce une erreur, un choix, un oubli, une obligation ?
Dans ce dernier cas, mentionnez-le dans votre signature par "Obligation de version".

Pour connaître la version que vous possédez : https://forum.openoffice.org/fr/forum/v ... 582#p11582

Nous vous invitons à vous mettre à jour de la dernière version : https://forum.openoffice.org/fr/forum/v ... m.php?f=38.

Votre signature doit comporter :
1- La version exacte de AOO ou LibO (AOO 4.1.4 ou LibO 5.3.7 par exemple) ;
2- La version exacte du système d'exploitation (Windows 7 SP2, MacOS X 10.13.2, ou Linux OpenSuse Leap 42.3, par exemple).
Accès direct à votre signature pour la corriger.

Cordialement.
                                        
Pour tout savoir sur le fonctionnement de ce forum :arrow: À lire avant tout ! Image
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 09:26

Re: [Calc] - Focus sur TextField lors de l'activation Checkb

Message par Hubert Lambert »

Essaie quelque chose comme ceci :

Code : Tout sélectionner

sub Enquete_CB_Modifiee(event)
    CB = event.Source
    DialTest = CB.Context
    numCB = int(right(CB.Model.Name, 1))
    TF = DialTest.getControl("TextField" & numCB)
    TF.setVisible(CB.State)
    if CB.State then TF.setFocus()
end sub
AOOo 4.1.7 sur Win10
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
| « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
stanol69
NOOuvel adepte
NOOuvel adepte
Messages : 21
Inscription : 04 juin 2015 23:14

Re: [Calc] - Focus sur TextField lors de l'activation Checkb

Message par stanol69 »

Bonjour,
En ce qui concerne ma signature, je vais regarder. Je l'avais mise à jour récemment.

La procédure marche, c'est parfait, merci beaucoup.
Pourquoi faut-il rajouter entre parenthèses (event) sur le nom de la sub sachant que ce "(event)" n'apparait pas dans la liste des sub présentes de l'explorateur et que ça ne bloque pas l'appel de la procédure ?
Est-ce que cela équivaudrait à Sub tralala EN TANT QU'EVENEMENT ?
Y a-t-il d'autres EN TANT QUE existants ?

Pour en revenir à la procédure, sachant que j'ai un nombre de Checkbox supérieur à 9, j'ai inclus un premier test sur la longueur du nom du contrôle qui me permet le cas échéant de récupérer les 2 derniers caractères du nom ou seulement le dernier. J'avais la flemme de renommer tous les contrôles ! :D

Code : Tout sélectionner

Dim CB as object
Dim numCB as integer
Dim TF as object

    CB = event.Source
    DialTest = CB.Context
    if len(CB.Model.Name) = 9 then
    numCB = int(right(CB.Model.Name, 1))
    Else
    numCB = int(right(CB.Model.Name, 2))
    End if    
    TF = DialTest.getControl("TextField" & numCB)
    TF.setVisible(CB.State)
    if CB.State then TF.setFocus()
Merci encore et je passe le sujet en résolu.
Cordialement,
LibreOffice 4.3- c'est la version imposée au travail
LibreOffice 5.4.5.1 à la maison
Windows 10
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 09:26

Re: [Calc] - Focus sur TextField lors de l'activation Checkb

Message par Hubert Lambert »

stanol69 a écrit :Pourquoi faut-il rajouter entre parenthèses (event) [...] et que ça ne bloque pas l'appel de la procédure ?
Comme je l'ai écrit dans ma première réponse, il s'agit d'un argument passé automatiquement à la fonction lorsque celle-ci est appelée par un contrôle. Il faut donc fournir une variable pour récupérer cet argument.
Basic est un programme laxiste. S'il se plaignait de l'absence de cet argument, on éviterait beaucoup de méprises.
stanol69 a écrit :Pour en revenir à la procédure, sachant que j'ai un nombre de Checkbox supérieur à 9, j'ai inclus un premier test sur la longueur du nom du contrôle qui me permet le cas échéant de récupérer les 2 derniers caractères du nom ou seulement le dernier. J'avais la flemme de renommer tous les contrôles ! :D
Oublie ta flemme et renomme tout de manière cohérente. Tu te remercieras toi-même lorsque tu voudras modifier ton code d'ici quelques mois :wink: .
AOOo 4.1.7 sur Win10
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
| « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
stanol69
NOOuvel adepte
NOOuvel adepte
Messages : 21
Inscription : 04 juin 2015 23:14

Re: [Résolu][Calc] - Focus sur TextField ... activation Chec

Message par stanol69 »

Ok pour le Basic.
En ce qui concerne ma flemme, je suis entièrement d'accord avec toi. Je ne l'ai pas (encore) fait :
J'ai des Checkbox qui sont numérotées de 1 à 22 avec les TextField qui vont avec (et un certain nombre d'autres contrôles).
Les informations des TF sont ensuite reportées sur une feuille de calcul grâce à une boucle qui cale l'index de la colonne à servir en rapport avec le N° du TF.
Donc effectivement, ça va me prendre 10 minutes à renommer de 10 à 31 à la place de 1 à 22, ce qui n'est rien, et permettra de ne pas avoir à me poser la question de la longueur du nom du contrôle.

Merci pour tes bons conseils.
Cordialement,
LibreOffice 4.3- c'est la version imposée au travail
LibreOffice 5.4.5.1 à la maison
Windows 10
Répondre