Ricerca di elementi nella casella di riepilogoVorrei sapere se esiste un modo semplice per trovare elementi nella GUI avendo una casella di riepilogo.
Qualcosa come il filtro di ricerca delle colonne ma per una casella di riepilogo.
Modellazione statistica avanzataRicerche sui consumatori e sul mercatoOrganizzazione dei contenutiCombinazione e pulizia dei datiEsplorazione e visualizzazione dei datiRi: Ricerca di elementi nella casella di riepilogoCome creo queste modifiche caso per caso, ma usare Filter Col Selector è abbastanza semplice (di solito non devo preoccuparmi delle tabelle private, ma non conosco il tuo caso d'uso, quindi ho fatto qualche trucchetto per loro)
Names Default To Here(1);
create_filter = function({items}, {Default Local},
dt = New Table("",
New Column("a", Character, Values(items)),
private
);
dt_split = dt << Split(
Split By(:a),
Split(:a),
Output Table("temp"),
Sort by Column Property,
private
);
Close(dt, no save);
Eval(EvalExpr(
fcs = Filter Col Selector(dt_split, << Set Script(
Expr(dt_split); // not sure how robust this will be, used to store the private table reference
));
));
return(fcs);
);
item_list1 = {"Alabama", "Alaska", "Arizona", "Arkansas", "California", "Colorado", "Connecticut", "Delaware", "Florida",
"Georgia", "Hawaii", "Idaho", "Illinois", "Indiana", "Iowa", "Kansas", "Kentucky", "Louisiana", "Maine",
"Maryland", "Massachusetts", "Michigan", "Minnesota"};
item_list2 = {"Mississippi", "Missouri", "Montana", "Nebraska",
"Nevada", "New Hampshire", "New Jersey", "New Mexico", "New York", "North Carolina", "North Dakota", "Ohio",
"Oklahoma", "Oregon", "Pennsylvania", "Rhode Island", "South Carolina", "South Dakota", "Tennessee", "Texas",
"Utah", "Vermont", "Virginia", "Washington", "West Virginia", "Wisconsin", "Wyoming"};
nw = New Window("demo",
H List Box(
a = create_filter(item_list1),
b = create_filter(item_list2)
)
);
Puoi anche utilizzare V List Box e crearlo utilizzando Text Edit Box (vuoi memorizzare l'elenco originale da qualche parte)
Names Default To Here(1);
create_filter = function({items}, {Default Local},
Eval(EvalExpr(
vlb = V List Box(
Text Edit Box("", <<SET text="" changed=""></SET>
ed esistono anche altri metodi a seconda dell'applicazione e del caso d'uso.
Ri: Ricerca di elementi nella casella di riepilogoCiao, grazie per la soluzione ma non funziona quando abbiamo più caselle di riepilogo nella stessa finestra. Per favore potete aiutarmi ? Mi piacerebbe avere una funzione generica per sostituire la funzione nativa listbox() con tale filtro. Ho provato con {DefaultLocal} nella mia funzione, ma non funziona. Vorrei aggiungere un argomento alla funzione filter_items() ma non posso. Dove sbaglio?
filter_items = Function( {this, searchText},
{filtered_items, i},
// only attempt to filter if there is any text
If( searchText != "",
// new list for groups that match searchText
filtered_items = {};
// Check if each group matches the given text
For( i = 1, i <= N Items( item_list ), i++,
// Insert to our list if it contains our search text (case insensitive)
If( Contains( Lowercase( item_list[i] ), Lowercase( searchText ) ),
Insert Into( filtered_items, item_list[i] );
)
);
,
// else show all groups
filtered_items = item_list;
);
item_disp_box << Set Items( filtered_items );
); // end filter_items function
listbox_with_filter = Function( {item},
listbox =
vlistbox(
hlistbox(
icon box("SearchIndex"),
spacer box(size(5, 10)),
item_search_teb =
text edit box("",
<< set width(300),
// The filter_items function does the work
<< set text changed(filter_items )
),
reset_button =
button box("",
<< set icon("DebuggerDeleteBreakpoint"),
<< set script(
// Clear the filter and call the callback function
item_search_teb << set text("");
filter_items(item_search_teb, "");
),
<< set tip("Clear filter"),
),
),
panelbox("Select a state:",
item_disp_box = listbox(item, width(200), nlines(10)),
)
);
return( listbox );
);
item_list1 = {"Alabama", "Alaska", "Arizona", "Arkansas", "California", "Colorado", "Connecticut", "Delaware", "Florida",
"Georgia", "Hawaii", "Idaho", "Illinois", "Indiana", "Iowa", "Kansas", "Kentucky", "Louisiana", "Maine",
"Maryland", "Massachusetts", "Michigan", "Minnesota"};
item_list2 = {"Mississippi", "Missouri", "Montana", "Nebraska",
"Nevada", "New Hampshire", "New Jersey", "New Mexico", "New York", "North Carolina", "North Dakota", "Ohio",
"Oklahoma", "Oregon", "Pennsylvania", "Rhode Island", "South Carolina", "South Dakota", "Tennessee", "Texas",
"Utah", "Vermont", "Virginia", "Washington", "West Virginia", "Wisconsin", "Wyoming"};
nw = new window("Two Listbox Search",
HListBox(
listbox_with_filter( item_list1 )
,
listbox_with_filter( item_list2 )
)
); Ri: Ricerca di elementi nella casella di riepilogoCarino! Non sapevo di '' << setTextChanged()'.
Ri: Ricerca di elementi nella casella di riepilogoQuesta soluzione aggiornerà la casella di riepilogo con ogni carattere digitato.Mi è stato mostrato per la prima volta da Justin Chilton.
filter_items = Function( {this, searchText},
{filtered_items, i},
// only attempt to filter if there is any text
If( searchText != "",
// new list for groups that match searchText
filtered_items = {};
// Check if each group matches the given text
For( i = 1, i <= N Items( item_list ), i++,
// Insert to our list if it contains our search text (case insensitive)
If( Contains( Lowercase( item_list[i] ), Lowercase( searchText ) ),
Insert Into( filtered_items, item_list[i] );
)
);
,
// else show all groups
filtered_items = item_list;
);
item_disp_box << Set Items( filtered_items );
); // end filter_items function
item_list = {"Alabama", "Alaska", "Arizona", "Arkansas", "California", "Colorado", "Connecticut", "Delaware", "Florida",
"Georgia", "Hawaii", "Idaho", "Illinois", "Indiana", "Iowa", "Kansas", "Kentucky", "Louisiana", "Maine",
"Maryland", "Massachusetts", "Michigan", "Minnesota", "Mississippi", "Missouri", "Montana", "Nebraska",
"Nevada", "New Hampshire", "New Jersey", "New Mexico", "New York", "North Carolina", "North Dakota", "Ohio",
"Oklahoma", "Oregon", "Pennsylvania", "Rhode Island", "South Carolina", "South Dakota", "Tennessee", "Texas",
"Utah", "Vermont", "Virginia", "Washington", "West Virginia", "Wisconsin", "Wyoming"};
nw = new window("Demonstrate Listbox Search",
hlistbox(
icon box("SearchIndex"),
spacer box(size(5, 10)),
item_search_teb = text edit box("",
<< set width(300),
// The filter_items function does the work
<< set text changed(filter_items)),
reset_button = button box("",
<< set icon("DebuggerDeleteBreakpoint"),
<< set script(
// Clear the filter and call the callback function
item_search_teb << set text("");
filter_items(item_search_teb, "");
),
<< set tip("Clear filter"),
),
),
panelbox("Select a state:",
item_disp_box = listbox(item_list, width(200), nlines(10)),
),
)


Ri: Ricerca di elementi nella casella di riepilogoBasandosi su @txnelson pensieri:
NamesDefaultToHere(1);
lbi = {"First Item", "Second Item", "Second Item Duplicate", "Third Item"};
New Window( "Searchable List Box",
PanelBox("Type in the box below and hit Enter to select matching list items",
teb = TextEditBox("", << setScript(updateLB), << setWidth(200)),
lb = List Box(lbi, << setWidth(200))
)
);
updateLB =
Expr(
txt = teb << getText;
lbiNew = lbi;
if(txt != "",
// Remove non-matching items according to some logic
for(i = NItems(lbi), i>= 1, i--, if(!StartsWith(lbi[i], txt), RemoveFrom(lbiNew, i)));
);
// Set new items
lb << setItems(lbiNew);
);
Ri: Ricerca di elementi nella casella di riepilogoGrazie. Sto cercando una casella di testo interattiva. Ad esempio, quando si digita "Sec" l'elenco rimuove gli elementi e mostra solo "Secondo elemento".Ri: Ricerca di elementi nella casella di riepilogoEcco un semplice esempio di ricerca in una casella di riepilogo().
Names Default To Here( 1 );
New Window( "Example",
fontobj = lb = List Box(
{"First Item", "Second Item", "Third Item"},
width( 200 ),
max selected( 2 ),
nlines( 6 )
)
);
show(contains(lb<<GET items=""></GET>
Se puoi fornire maggiori dettagli, potrebbe essere disponibile una risposta più precisa