Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Bonjour , j'ai mis 2 dropdownlistbox dans une fenetre..ce que je veux faire c'est récupérer dans une variable ce que l'utilisateur selectionne dans la première puis , en fonction de celle-ci afficher des items dans la seconde..
voici mon code pour la premiere list :
// choix de la profession If ddlb_2.Text = "Moine" then profession = "Moine" elseif ddlb_2.Text = "Guerrier" then profession = "Guerrier" elseif ddlb_2.Text = "Ritualiste" then profession = "Ritualiste" elseif ddlb_2.Text = "Assassin" then profession = "Assassin" elseif ddlb_2.Text = "Necromancien" then profession = "Necromancien" elseif ddlb_2.Text = "Elementaliste" then profession = "Elementaliste" elseif ddlb_2.Text = "Paragon" then profession = "Paragon" elseif ddlb_2.Text = "Derviche" then profession = "Derviche" elseif ddlb_2.Text = "Rodeur" then profession = "Rodeur" elseif ddlb_2.Text = "Envouteur" then profession = "Envouteur" End if
puis la deuxieme :
//Association des caractéristique de chaque profession If profession = "Ritualiste" then ddlb_1.AddItem("Puissance de l'invocation") ddlb_1.AddItem("Communion") ddlb_1.AddItem("Magie de canalisation") ddlb_1.AddItem("Magie de restauration") ddlb_1.AddItem("Aucune") End if ddlb_1.FindItem("Puissance de l'invocation",
avec profession comme variable globale..lorsque je test voir si il y a quelque chose dans la variable apres selection de la profession, j'ai le résultat mais l'affichage d ela 2e liste marche pas ..
Hors ligne
Bonjour,
Dans quels événements as-tu codé tes scripts?
Tes dropdownlistbox sont-elles triées en automatique, ont-elles des HScrollbar?
As-tu géré des SetReDraw dans ta fenêtre ou tes dropdowns?
Sinon, pour information, il aurait été plus judicieux d'utiliser un CHOOSE CASE dans ton premier script...
Hors ligne
Bonjour,
À quel endroit as tu posé tes deux scripts exemple ?
La récupération de la nouvelle profession doit se faire à chaque modification dans ta première liste, et c'est aussi un bon endroit pour initialiser le contenu de ta seconde -> tes deux bouts de script doivent être appelés depuis l'événement selectionchanged de ta première liste.
En exemple, démo rapide construite sur ton code. C'est rustique, mais ça fonctionne :
$PBExportHeader$w_testage.srw forward global type w_testage from window end type type ddlb_2 from dropdownlistbox within w_testage end type type ddlb_1 from dropdownlistbox within w_testage end type end forward global type w_testage from window integer width = 3168 integer height = 1760 boolean titlebar = true string title = "Testage" boolean controlmenu = true boolean minbox = true boolean maxbox = true boolean resizable = true long backcolor = 67108864 string icon = "AppIcon!" boolean toolbarvisible = false boolean center = true ddlb_2 ddlb_2 ddlb_1 ddlb_1 end type global w_testage w_testage on w_testage.create this.ddlb_2=create ddlb_2 this.ddlb_1=create ddlb_1 this.Control[]={this.ddlb_2,& this.ddlb_1} end on on w_testage.destroy destroy(this.ddlb_2) destroy(this.ddlb_1) end on type ddlb_2 from dropdownlistbox within w_testage integer x = 37 integer y = 32 integer width = 480 integer height = 816 integer taborder = 20 integer textsize = -10 integer weight = 400 fontcharset fontcharset = ansi! fontpitch fontpitch = variable! fontfamily fontfamily = swiss! string facename = "Tahoma" long textcolor = 33554432 string item[] = {"Moine","Guerrier","Ritualiste","Assassin","Necromancien","Elementaliste","Paragon","Derviche","Rodeur","Envouteur"} borderstyle borderstyle = stylelowered! end type event selectionchanged; Integer li_index // choix de la profession If ddlb_2.Text = "Moine" then profession = "Moine" elseif ddlb_2.Text = "Guerrier" then profession = "Guerrier" elseif ddlb_2.Text = "Ritualiste" then profession = "Ritualiste" elseif ddlb_2.Text = "Assassin" then profession = "Assassin" elseif ddlb_2.Text = "Necromancien" then profession = "Necromancien" elseif ddlb_2.Text = "Elementaliste" then profession = "Elementaliste" elseif ddlb_2.Text = "Paragon" then profession = "Paragon" elseif ddlb_2.Text = "Derviche" then profession = "Derviche" elseif ddlb_2.Text = "Rodeur" then profession = "Rodeur" elseif ddlb_2.Text = "Envouteur" then profession = "Envouteur" End if //Association des caractéristique de chaque profession If profession = "Ritualiste" then ddlb_1.AddItem("Puissance de l'invocation") ddlb_1.AddItem("Communion") ddlb_1.AddItem("Magie de canalisation") ddlb_1.AddItem("Magie de restauration") ddlb_1.AddItem("Aucune") End if li_index = ddlb_1.FindItem("Puissance de l'invocation", 0) MessageBox("Index", li_index) end event type ddlb_1 from dropdownlistbox within w_testage integer x = 549 integer y = 32 integer width = 480 integer height = 816 integer taborder = 10 integer textsize = -10 integer weight = 400 fontcharset fontcharset = ansi! fontpitch fontpitch = variable! fontfamily fontfamily = swiss! string facename = "Tahoma" long textcolor = 33554432 borderstyle borderstyle = stylelowered! end type
Quelques remarques supplémentaires :
- le FindItem() me semble inutile pour l'exemple, il sert juste à récupérer le numéro de la ligne contenant ton texte ;
- pense à faire un Reset() avant tes AddItem(), histoire de n'avoir dans la liste que les caractéristiques de la profession choisie ;
- en français, on dit paraNgon
Bon courage pour PowerBuilder, et bon jeu pour Guild Wars !
Hors ligne
HeB a écrit:
Code: pb
// choix de la profession If ddlb_2.Text = "Moine" then profession = "Moine" elseif ddlb_2.Text = "Guerrier" then profession = "Guerrier" elseif ddlb_2.Text = "Ritualiste" then profession = "Ritualiste" elseif ddlb_2.Text = "Assassin" then profession = "Assassin" elseif ddlb_2.Text = "Necromancien" then profession = "Necromancien" elseif ddlb_2.Text = "Elementaliste" then profession = "Elementaliste" elseif ddlb_2.Text = "Paragon" then profession = "Paragon" elseif ddlb_2.Text = "Derviche" then profession = "Derviche" elseif ddlb_2.Text = "Rodeur" then profession = "Rodeur" elseif ddlb_2.Text = "Envouteur" then profession = "Envouteur" End if
Bonjour, quelques conseils d'ordre général :
tu pourrais avantageusement remplacer le code précédent par celui ci :
profession = ddlb_2.Text
Par ailleurs, il est conseillé d'utiliser la nomenclature standard pour les variables. Par exemple : profession = variable globale chaine deviendra gs_profession
.
Jete un coup d'oeil à ce topic
Pour le fond de ta question, la réponse de FMolinas devrait bien t'aider
Bonne chance.
Hors ligne
hehe:merci:
ok merci de vos réponses !! j'ais remis le code ou il fallait et ca marche impect puis corriger parangon
bonne journée
Hors ligne