リストボックス内の要素を検索するリストボックスを持つGUIで要素を見つける簡単な方法があるかどうか知りたいです。
列検索フィルターに似ていますが、リストボックス用です。
高度な統計モデリング消費者および市場調査コンテンツの構成データのブレンディングとクリーンアップデータの探索と視覚化Re: リストボックス内の要素を検索するこれらの変更をどのように構築するかはケースバイケースですが、Filter Col Selector を使用するのは非常に簡単です (通常、プライベート テーブルについて心配する必要はありませんが、ユースケースがわからないので、いくつかのトリックを実行しました)
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)
)
);
V リスト ボックスを使用し、テキスト エディット ボックスを使用して作成することもできます (元のリストをどこかに保存したい場合)
Names Default To Here(1);
create_filter = function({items}, {Default Local},
Eval(EvalExpr(
vlb = V List Box(
Text Edit Box("", <<SET text="" changed=""></SET>
アプリケーションやユースケースに応じて他の方法もあります。
Re: リストボックス内の要素を検索するこんにちは、解決策をありがとうございます。しかし、同じウィンドウ内に複数のリストボックスがある場合は機能しません。 手伝っていただけませんか ? listbox() ネイティブ関数をそのようなフィルターで置き換える汎用関数が必要です。 {DefaultLocal} を関数に入れてみましたが、機能しません。 filter_items() 関数に引数を追加したいのですが、追加できません。 私のどこが間違っているのでしょうか?
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 )
)
); Re: リストボックス内の要素を検索するニース! '' << setTextChanged()' については知りませんでした。
Re: リストボックス内の要素を検索するこのソリューションでは、入力した文字ごとにリストボックスが更新されます。ジャスティン・チルトンが初めて私に見せてくれました。
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)),
),
)


Re: リストボックス内の要素を検索する基礎を築く@txnelson考え:
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);
);
Re: リストボックス内の要素を検索するありがとう。 インタラクティブなテキストボックスを探しています。 たとえば、「Sec」と入力すると、リストから要素が削除され、「2 番目の項目」のみが表示されます。Re: リストボックス内の要素を検索する次に、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>
より詳細な情報を提供していただければ、より正確な回答が得られる可能性があります