Suche nach Elementen in der ListboxIch würde gerne wissen, ob es eine einfache Möglichkeit gibt, Elemente in der GUI mit einer Listbox zu finden.
So etwas wie der Spaltensuchfilter, aber für eine Listbox.
Erweiterte statistische ModellierungVerbraucher- und MarktforschungInhaltsorganisationDatenmischung und -bereinigungDatenexploration und -visualisierungBetreff: Suche nach Elementen in der ListboxWie ich diese Änderungen von Fall zu Fall erstelle, aber die Verwendung von Filter Col Selector ist ziemlich einfach (normalerweise muss ich mir keine Sorgen um die privaten Tabellen machen, aber ich kenne Ihren Anwendungsfall nicht, also habe ich einige Tricks für sie angewendet).
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)
)
);
Sie können auch das V-Listenfeld verwenden und es mithilfe des Textbearbeitungsfelds erstellen (Sie möchten die ursprüngliche Liste irgendwo speichern).
Names Default To Here(1);
create_filter = function({items}, {Default Local},
Eval(EvalExpr(
vlb = V List Box(
Text Edit Box("", <<SET text="" changed=""></SET>
und es gibt je nach Anwendung und Anwendungsfall auch andere Methoden.
Betreff: Suche nach Elementen in der ListboxHallo, danke für die Lösung, aber es funktioniert nicht, wenn wir mehrere Listboxen im selben Fenster haben. Könnten Sie mir bitte helfen ? Ich hätte gerne eine generische Funktion, um die native Funktion listbox() durch einen solchen Filter zu ersetzen. Ich habe es mit {DefaultLocal} in meiner Funktion versucht, aber es funktioniert nicht. Ich würde gerne ein Argument zur Funktion filter_items() hinzufügen, aber das geht nicht. Wo irre ich mich?
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 )
)
); Betreff: Suche nach Elementen in der ListboxHübsch! Ich wusste nichts über '' << setTextChanged()'.
Betreff: Suche nach Elementen in der ListboxDiese Lösung aktualisiert das Listenfeld mit jedem von Ihnen eingegebenen Zeichen.Zum ersten Mal wurde es mir von Justin Chilton gezeigt.
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)),
),
)


Betreff: Suche nach Elementen in der ListboxAufbauend auf @txnelson Gedanken:
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);
);
Betreff: Suche nach Elementen in der ListboxDanke. Ich bin auf der Suche nach einem interaktiven Textfeld. Wenn Sie beispielsweise „Sec“ eingeben, entfernt die Liste Elemente und zeigt nur „Second Item“ an.Betreff: Suche nach Elementen in der ListboxHier ist ein einfaches Beispiel für eine Suche in einer List Box().
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>
Wenn Sie weitere Einzelheiten angeben können, ist möglicherweise eine genauere Antwort verfügbar