Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Bonjour à tous,
j'ai 2 window (w_1 et w_2) dans mon programme que je voulais les lancer un par un automatiquement sans les ouvrir (sans utiliser la fonction Open). ==> rassembler les traitement
pour cela mon bout de code est le suivant :
w_1 = create w_1 // instancier la 1ère Window w_1.TriggerEvent("open") w_1.cb_retrouver.TriggerEvent(Clicked!) w_1.dw_detail.insertrow(0) // ICI insertrow retourne -1 !!! w_1.TriggerEvent("close") // 2 ème Window w_2 = create w_2 // instancier la 2ème Window w_2.TriggerEvent("open") w_2.cb_retrouver.TriggerEvent(Clicked!) w_2.dw_detail.insertrow(0) // ICI insertrow retourne -1 !!! w_2.TriggerEvent("close")
les events sont exécuté avec succées, les datawindow sont reconnus mais je peux pas les manipuler (insertrow retoune -1, retrieve aussi).
je ne veux pas dupliquer le code des 2 fenetres dans le nouvel traitement par ce que j'aurais une redondance de code.
en utlisant "Open(w_1)" au lieu de "w_1 = create w_1", cela fonctionne trés bien ; mais je ne veux pas ouvrir la w_1 , en plus que faire si la window est ouverte et contient des données ??
de même j'ai pas intérêt à factoriser les traitements dans des userobjects et des fonctions car un risque de regression est grand, en plus ça coutera bcp en terme de temps.
Merci d'avance pour vos réponses !!
Hors ligne
Si j'ai compris pourquoi ne pas utiliser la fonction open() mais avec la propriété non visible pour les fenêtres ?
L'instruction w_1 = create w_1, n'est pas équivalent à open() en PB, open() fait appel à plus d'instructions.
Dernière modification par Dadone (14-06-2011 09:28:23)
Hors ligne
C'est sure que la fonction "Open()" englobe l'event "open".
Mais mon problème c'est quoi faire lorsque la fenetre w_1 est déja ouverte en plus elle contient des données que je ne veux pas écraser.
Il y a t-il une solution pour faire fonctionner ma proposition
Merci ;)
Hors ligne
dydo a écrit:
C'est sure que la fonction "Open()" englobe l'event "open".
Mais mon problème c'est quoi faire lorsque la fenetre w_1 est déja ouverte en plus elle contient des données que je ne veux pas écraser.
Il y a t-il une solution pour faire fonctionner ma proposition
Merci ;)
Si une classe est déjà instanciée, on peut créer une seconde instance cette nouvelle instance contiendra des nouvelles données indépendantes de la première instance. La routine open() permet de créer autant d'instance que l'on souhaite. et encore une fois la propriété non visible évite le problème des données visibles.
Dernière modification par Dadone (14-06-2011 09:53:45)
Hors ligne
Tu as fait un setTransObject sur tes datawindows?
Hors ligne
foon a écrit:
Tu as fait un setTransObject sur tes datawindows?
Même le setTransObject me retourne -1 !!!
c'est vraiment étrange, la datawindow est reconnue mais je peux rien manipuler.
j'ai préféré ne pas utiliser la fonction Open() mais .... j'ai pas le choix
Merci bien à vous
Hors ligne
dydo a écrit:
foon a écrit:
Tu as fait un setTransObject sur tes datawindows?
Même le setTransObject me retourne -1 !!!
c'est vraiment étrange, la datawindow est reconnue mais je peux rien manipuler.
j'ai préféré ne pas utiliser la fonction Open() mais .... j'ai pas le choix
Merci bien à vous
Cela viens du fait que la partie graphique n'a pas été "activée", en générale il faut faire un OpenUserObject(...) pour palier à ce problème. Dans ton cas, c'est différent, tu voudrais utiliser ton object window sans faire le Open( ... ) et pouvoir accéder à ces controls, ce qui n'est pas possible à ma connaissance.
D'un autre côté, ce que tu exprimes me laisse penser qu'il faudrait revoir le code de cette fenêtre pour encapsuler le comportement réutilisable à l’extérieur (ex, passer par un nvo). Si c'est trop lourd à faire alors je ne vois guère autre chose que ce qu'a proposé Dadone.
Hors ligne
En revanche, il y a un aspect que je n'ai pas compris : qu'est ce qui empêche le code d'être factorisé entre les 2 fenêtres ?
Il n'existe pas de cas ou la factorisation est impossible pour des de classes de même type (ici le type est "window"). Il suffit d'une relation hiérachique commune.
Hors ligne
Je crois qu'il veux dire que c'est relativement chaotique et que tout le monde tremble à l'idée de toucher à cette partie de code ...
Ceci dit, dans ce genre de cas, je conseil quand même une analyse poussée quitte à passer du temps une fois; de plus il existe des outils comme VE pour çà
Hors ligne
Bonjour,
Merci bcp pour vos réponses !!
je me sens pas seul à me casser la tête
en faite, je crois que je vais utiliser la fonction OpenUserObject(...) pour initialiser mes datawindow ==> j'ai testé cette fonction et ça fonctionne à merveille.
1000 merci
Hors ligne
ne pas oublier d'ajouter le [RESOLU] dans le titre de la discussion
Hors ligne