Boîte d'affichage dynamique basée sur la sélection de la zone de liste déroulanteEn cherchant de l'aide ici, je n'arrive pas à faire fonctionner correctement la boîte d'affichage car elle revient sans cesse à une fenêtre vide lorsque "Option 1" est resélectionnée (quelques photos pour référence).
J'apprécie vraiment l'aide!
names default to here(1);
Buttons = {"Button 1", "Button 2", "Button3"};
Boxes = {"Box 1", "Box 2", "Box 3"};
LB_Input_1 = lineupbox(ncol(2),spacing(5));
for(i=1,i<=nitems(Buttons),i++,
label1 = char(Buttons[i]);
bblabel1 = "clb_" || char(i);
eval(parse(evalinsert("\[LB_Input_1 << append(buttonbox("^label1^", ^bblabel1^ << append(clb2 << get selected)))]\")));
eval(parse(evalinsert("\[LB_Input_1 << append(^bblabel1^ = col list box("Numeric",minitems(1),maxitems(1),nlines(1)))]\")));
);
for(i=1,i<=nitems(Boxes),i++,
label1 = char(Boxes[i]);
neblabel1 = "neb_"||char(i);
eval(parse(evalinsert("\[LB_input_1 << append(Text box("^label1^"))]\")));
eval(parse(evalinsert("\[LB_input_1 << append(^neblabel1^ = Number edit box())]\")));
);
HB1 = hlistbox(
clb2 = filter col selector(dt1,all),
LB_input_1
);
LB_Input_2 = lineupbox(ncol(2),spacing(5));
for(i=1,i<=nitems(Buttons)-1,i++,
label1 = char(Buttons[i]);
bblabel1 = "clb_" || char(i);
eval(parse(evalinsert("\[LB_Input_2 << append(buttonbox("^label1^", ^bblabel1^ << append(clb2 << get selected)))]\")));
eval(parse(evalinsert("\[LB_Input_2 << append(^bblabel1^ = col list box("Numeric",minitems(1),maxitems(1),nlines(1)))]\")));
);
for(i=1,i<=nitems(Boxes)-1,i++,
label1 = char(Boxes[i]);
neblabel1 = "neb_"||char(i);
eval(parse(evalinsert("\[LB_input_2 << append(Text box("^label1^"))]\")));
eval(parse(evalinsert("\[LB_input_2 << append(^neblabel1^ = Number edit box())]\")));
);
HB2 = hlistbox(
clb2 = filter col selector(dt1,all),
LB_input_2
);
dt1 = current data table();
new window("Test",
vb1 = vlistbox(Text box(""),
Panel Box("Selection Option",H list box(text box("Select: "),
combo1 = combobox({"Option 1","Option 2"},
<< set function(function({this,index},
match(index,
1,
vb1 << append (try(view << delete);
view = HB1;
),
2,
vb1 << append (try(view << delete);
view = HB2;
)
)
))
)
)
),
text box (""),
view = HB1;
)
);



Études de consommation et de marchéRe : Boîte d'affichage dynamique basée sur la sélection d'une liste déroulante@jthi Merci d'avoir expliqué votre approche de débogage !
Je vois assez souvent le "Displaybox[]" dans le journal, mais je suppose que je n'ai pas vraiment compris ce que signifie le journal. Merci pour les indications !
Re : Boîte d'affichage dynamique basée sur la sélection d'une liste déroulanteBien sûr.J'espère que cela aide:
1. Ouvrez la fenêtre du journal
2. Exécutez le script -> Fonctionne correctement
3. Changez l'option de l'option 1 à l'option 2 -> Fonctionne bien
4. Changez l'option de l'option 2 à l'option 1 -> La zone d'affichage disparaît
5. Remplacez l'option de l'option 1 par l'option 2 -> La boîte d'affichage est toujours manquante
À ce stade, j'ai commencé à me demander si quelque chose ne va pas avec HB1 et HB2, et s'ils sont supprimés lorsque vous modifiez les options.
6. Exécutez à nouveau le script. Mettez en surbrillance HB1 dans la fenêtre de script et exécutez le script pour obtenir des informations sur la variable dans la fenêtre de journal (DisplayBox[ListBox])
7. Changez l'option de l'option 1 à l'option 2.Mettez en surbrillance HB1 dans la fenêtre de script et exécutez le script pour obtenir des informations sur la variable dans la fenêtre de journal (DisplayBox[])
8. Notez que ListBox a disparu

9. Commencez à comprendre ce qui ne va pas et comment y remédier
Cela pourrait vous aider à comprendre ce qui se passe : à un moment donné, les zones de liste H HB1 et HB2 sont supprimées.
Re : Boîte d'affichage dynamique basée sur la sélection d'une liste déroulanteMerci @jthi
La solution fonctionne !
En guise de suivi, pourriez-vous clarifier les 3 étapes de débogage que vous avez mentionnées ? Je ne comprends pas vraiment ce commentaire.
Problème et comment déboguer :
1. Exécutez le script
2. Vérifiez le contenu de HB1 et HB2 (DisplayBox[ListBox])
3. Passez à l'option 2 et vérifiez le contenu de HB1 (DisplayBox[])
Re : Boîte d'affichage dynamique basée sur la sélection d'une liste déroulanteProblème et comment déboguer :
1. Exécutez le script
2. Vérifiez le contenu de HB1 et HB2 (DisplayBox[ListBox])
3. Passez à l'option 2 et vérifiez le contenu de HB1 (DisplayBox[])
Solution rapide (et sale ?) qui pourrait éventuellement aider. Voyez comment j'ai modifié les emplacements de référence HB1 et HB2 et en ai fait des expressions :
names default to here(1);
Buttons = {"Button 1", "Button 2", "Button3"};
Boxes = {"Box 1", "Box 2", "Box 3"};
HB1 = Expr(
LB_Input_1 = lineupbox(ncol(2),spacing(5));
for(i=1,i<=nitems(Buttons),i++,
label1 = char(Buttons[i]);
bblabel1 = "clb_" || char(i);
eval(parse(evalinsert("\[LB_Input_1 << append(buttonbox("^label1^", ^bblabel1^ << append(clb2 << get selected)))]\")));
eval(parse(evalinsert("\[LB_Input_1 << append(^bblabel1^ = col list box("Numeric",minitems(1),maxitems(1),nlines(1)))]\")));
);
for(i=1,i<=nitems(Boxes),i++,
label1 = char(Boxes[i]);
neblabel1 = "neb_"||char(i);
eval(parse(evalinsert("\[LB_input_1 << append(Text box("^label1^"))]\")));
eval(parse(evalinsert("\[LB_input_1 << append(^neblabel1^ = Number edit box())]\")));
);
hlistbox(
clb2 = filter col selector(dt1,all),
LB_input_1
);
);
HB2 = Expr(
LB_Input_2 = lineupbox(ncol(2),spacing(5));
for(i=1,i<=nitems(Buttons)-1,i++,
label1 = char(Buttons[i]);
bblabel1 = "clb_" || char(i);
eval(parse(evalinsert("\[LB_Input_2 << append(buttonbox("^label1^", ^bblabel1^ << append(clb2 << get selected)))]\")));
eval(parse(evalinsert("\[LB_Input_2 << append(^bblabel1^ = col list box("Numeric",minitems(1),maxitems(1),nlines(1)))]\")));
);
for(i=1,i<=nitems(Boxes)-1,i++,
label1 = char(Boxes[i]);
neblabel1 = "neb_"||char(i);
eval(parse(evalinsert("\[LB_input_2 << append(Text box("^label1^"))]\")));
eval(parse(evalinsert("\[LB_input_2 << append(^neblabel1^ = Number edit box())]\")));
);
hlistbox(
clb2 = filter col selector(dt1,all),
LB_input_2
);
);
dt1 = current data table();
new window("Test",
vb1 = vlistbox(Text box(""),
Panel Box("Selection Option",H list box(text box("Select: "),
combo1 = combobox({"Option 1","Option 2"},
<< set function(function({this,index},
try(view << delete);
match(index,
1,
vb1 << append (
view = HB1;
),
2,
vb1 << append (
view = HB2;
)
)
))
)
)
),
text box (""),
view = HB1;
)
);