
Le forum (ô combien francophone) des utilisateurs de Powerbuilder.





Bonjour,
J'ai placé un Tab control dans ma fenêtre avec plusieurs onglets. J'aimerai que lorsque je click sur un bouton, tout mes onglets disparaissent...
Est ce posible?
Hors ligne














Bonjour, tu peux le cacher :
tab_1.Hide( )
Hors ligne





oui, mais la fonction hide() permet de cacher et moi je veux qu'après appuis sur le bouton, le Tab control ne possède plus aucun onglet.
Hors ligne
poche a écrit:
oui, mais la fonction hide() permet de cacher et moi je veux qu'après appuis sur le bouton, le Tab control ne possède plus aucun onglet.
CloseTab
Hors ligne














For li_cnt = 1 To UpperBound( tab_1.Control ) tab_1.CloseTab( tab_1.Control[ li_cnt ] ) Next
Hors ligne





Merci
Hors ligne





Pourquoi ce la me met une erreur lorsque je met ceci :
li_nbre =UpperBound( tab_1.Control ) For li_cnt = 1 To li_nbre tab_1.CloseTab( tab_1.Control[ li_cnt ] ) Next
Alors que cela me génère pas une erreur lorsque j'écris cela (le problème avec ce code c'est qu'il me reste un onglet alors que je veux tous les supprimer!!!)
For li_cnt = 1 To UpperBound( tab_1.Control ) tab_1.CloseTab( tab_1.Control[ li_cnt ] ) Next
modération : Ne pas oublier code=pb
Hors ligne








Quelle est ton erreur?
Hors ligne





Error : Array boundary exceeded at line 26 in clicked of object cb_affich of w_fenetre
Hors ligne







Heu ... si ensuite la fenetre ne possède plus de 'tab', n'est ce pas plus simple de fermer simplement la fenêtre (sauf si ce n'est pas le but recherché )
PS : Vu que je suis aussi sur Java, j'ai pensé à l'erreur des indices de tableaux qui commenceraient à 0 au lieu de 1, est ce que c'est le cas aussi sous powerbuilder?
Dernière modification par Nephtis (21-08-2007 11:05:05)
Hors ligne





Le but est de supprimer tous les onglet et d'en rajouter d'autre part la suite.
Hors ligne








poche a écrit:
Le but est de supprimer tous les onglet et d'en rajouter d'autre part la suite.
ben ferme la fenetre et ouvres en une avec les onglets que tu veux non ?
Hors ligne





Voila le fonctionnement :
Je change la date, j'appuis sur un bouton, il charge les données dans les datawindows et suivants les données dans les datawindows, plusieur onglets se crés.
Hors ligne














essaye dans l'ordre inverse :
li_nbre =UpperBound( tab_1.Control ) For li_cnt = li_nbre To 1 Step -1 tab_1.CloseTab( tab_1.Control[ li_cnt ] ) Next
Hors ligne







Par contre un bon debuggage serait de verifier en temps réel les valeurs de tes variables (si ça ne marche toujours pas) parce que le message d'erreur c'est que tu essaie d'acceder à un élément du tableau qui n'existe pas
Hors ligne





J'ai fais ceci et ça marche super merci:
li_nbr_onglet=UpperBound( tab_1.Control ) DO UNTIL li_nbr_onglet = 0 tab_1.CloseTab(tab_1.Control[ li_nbr_onglet ] ) li_nbr_onglet=li_nbr_onglet - 1 LOOP
Hors ligne














poche a écrit:
J'ai fais ceci et ça marche super merci:
Code: pb
li_nbr_onglet=UpperBound( tab_1.Control ) DO UNTIL li_nbr_onglet = 0 tab_1.CloseTab(tab_1.Control[ li_nbr_onglet ] ) li_nbr_onglet=li_nbr_onglet - 1 LOOP
oui cela revient au même que le For Next avec un step de -1... (avec une ligne de code en plus )_
Hors ligne
J'en profite pour rebondir sur la réponse d'Erasorz et faire un petit rappel d'ordre générale.
Lorsque l'on supprime, il est toujours préférable de partir de la fin pour revenir au début.
C'est valable pour un tableau de control (car il se resize à chaque fois), mais également pour une DW, des enregistrements en base, etc.
Simplement car dans de nombreux cas cela évite aux systèmes (PB, BDD, etc.) de gérer le décalage des éléments.
C'est donc souvent plus rapide...
Hors ligne