Boîte d'affichage dynamique basée sur la sélection de la zone de liste déroulanteVous cherchez de l'aide ici, je ne parviens pas à faire fonctionner correctement la boîte d'affichage car elle revenait constamment à une fenêtre vide lorsque "Option 1" est re-sé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;
)
);



GraphiqueScriptingRe: Boîte d'affichage dynamique basée sur la sélection de la zone de 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 changé 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;
)
);Re: Boîte d'affichage dynamique basée sur la sélection de la zone de 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 tout à fait 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 de la zone de liste déroulanteSûr.Espérons 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 très bien
4. Changez l'option de l'option 2 à l'option 1 -> la boîte d'affichage disparaît
5. Remplacez l'option 1 par l'option 2 -> Boîte d'affichage 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 à déterminer ce qui ne va pas et comment y remédier
Cela peut vous aider à comprendre ce qui se passe: à un moment donné, les listes HB1 et HB2 H sont supprimées.
Re : Zone d'affichage dynamique basée sur la sélection de la zone de liste déroulante@jthi Merci d'avoir expliqué votre approche de débogage !
Je vois assez souvent la "Displaybox[]" dans le journal, mais je suppose que je n'ai pas vraiment compris ce que signifie le journal. Merci pour les pointeurs !