如何根據模式視窗中的先前選擇更改複選框(或變得可見或活動)?在下面的腳本中,我想執行以下操作:
根據 TestTech 的選擇,我希望顯示相應的 TestStage 複選框清單(出現是首選,如果不是的話變得活躍如果所有選項都需要可見)。所以,
- 如果選擇 Tech1,則所有具有 _Tech1 的 TestSages 都應可供使用者選擇
- 如果選擇 Tech2,則所有具有 _Tech2 的 TestSages 都應可供使用者選擇。 該列表評論如下
- 如果選擇 Tech3,則所有具有 _Tech3 的 TestSages 都應可供使用者選擇。 下面對此列表進行了評論,等等。
我還希望每個清單下方都提供“全選”選項。
這個怎麼做?
Names Default To Here( 1 );
Clear Log ();
listInd = {};
returned2 = {};
win = New Window( "Select Tech & TestStage", << modal,
V List Box (
tb1=Text Box("Select Tech", << set font style("bold")),
cb1 = List Box(
{"Tech1", "Tech2", "Tech3"},
returned1 = (cb1 << Get Selected());
listInd= cb1 << Get Selected Indices;
),
tb1=Text Box("Select one or more TestStage", << set font style("bold")),
cb2 = Check Box(
{"Sage1_Tech1", "Sage2_Tech1", "Sage3_Tech1", "Sage4_Tech1", "Sage5_Tech1", "Sage6_Tech1"},
//{"Sage1_Tech2", "Sage2_Tech2", "Sage3_Tech2", "Sage4_Tech2", "Sage5_Tech2", "Sage6_Tech2"},
//{"Sage1_Tech3", "Sage2_Tech3", "Sage3_Tech3", "Sage4_Tech3", "Sage5_Tech3", "Sage6_Tech3"},
returned2 = (cb2 << Get Selected());
),
tb3=Text Box("Query TestDate (last 6 months selected by default)", << set font style("bold")),
end_date = Today();
start_date = Date Increment(end_date, "month", -6, "actual");
cb3 = H List Box(
Text Box("From:"),
scal = Number Edit Box(
start_date,
<<SET format=""></SET>
自動化和腳本編寫視窗回覆:如何根據模式視窗中的先前選擇更改複選框(或變得可見或活動)?這可能會給您一些可以做什麼的想法
Names Default To Here(1);
lb_values = {"Tech1", "Tech2", "Tech3"};
cb_values = {"Sage1_Tech1", "Sage2_Tech1", "Sage3_Tech1", "Sage4_Tech1", "Sage5_Tech1", "Sage6_Tech1",
"Sage1_Tech2", "Sage2_Tech2", "Sage3_Tech2", "Sage4_Tech2", "Sage5_Tech2", "Sage6_Tech2",
"Sage1_Tech3", "Sage2_Tech3", "Sage3_Tech3", "Sage4_Tech3", "Sage5_Tech3", "Sage6_Tech3"
};
expr_update_cb = Expr(
cur_sel = lb << get selected;
If(N Items(cur_sel),
cur_cb_values = Filter Each({val}, cb_values,
cur_tech = Word(2, val, "_");
Contains(cur_sel, cur_tech);
);
,
cur_cb_values = cb_values;
);
cb2 << Set items(cur_cb_values);
);
win = New Window("Select Tech & TestStage", <<MODAL></MODAL>回覆:如何根據模式視窗中的先前選擇更改複選框(或變得可見或活動)?@jthi謝謝。 運行腳本首先顯示所有內容測試階段在下面測試階段預設情況下(貼在下面),然後一次科技被選中,它會根據需要運行。
是否可以將腳本修改為首先不顯示任何內容測試階段選擇文本,然後一旦科技已選擇,顯示適當/可用的 TestStages?

回覆:如何根據模式視窗中的先前選擇更改複選框(或變得可見或活動)?您可以使用空列表而不是 cb_values 來初始化該複選框。
回覆:如何根據模式視窗中的先前選擇更改複選框(或變得可見或活動)?@jthi我已經嘗試過
cb_values = {};但我認為我沒有正確放置它。 這個聲明應該去哪裡呢?
回覆:如何根據模式視窗中的先前選擇更改複選框(或變得可見或活動)?這是您第一次設定這些值的地方

另外,如果您希望在未進行任何選擇時它始終為空,您還必須對 expr_update_cb 進行小修改
回覆:如何根據模式視窗中的先前選擇更改複選框(或變得可見或活動)?@jthi 。 在那種情況下,我確實放置了
cb_values = {};正確,但沒有做小修改expr_update_cb。只要將上面的行放在 cb2= Check Box(... 之前就不會執行一次所需的操作科技被選中。 思維.......
回覆:如何根據模式視窗中的先前選擇更改複選框(或變得可見或活動)?使用空列表而不是 cb_values 初始化複選框(它們是不同的東西)。
在表達式中,這是您必須考慮(並理解)的部分

這裡為什麼要用if語句呢? 如果我們去別的地方會發生什麼事? 如果我們沒有它,我們有一個空列表並轉到“過濾每個”,會發生什麼?
回覆:如何根據模式視窗中的先前選擇更改複選框(或變得可見或活動)?@jthi感謝您的指點,我昨晚嘗試過,但到目前為止沒有成功。
這就是我對要求的理解,如果在下面沒有選擇任何項目磅然後CB2不應該顯示。 cb2 僅應在 N 個項目(cur_sel)時顯示≥1。
然而, expr_update_cb僅當在其中選擇一個或多個項目時才會觸發磅。
我不清楚如何修改expr_update_cb當沒有選擇任何內容時執行磅。
如果要求不顯示任何內容CB2用 if/else 語句處理磅即如果 lb 下未選擇任何內容,則不顯示CB2?
回覆:如何根據模式視窗中的先前選擇更改複選框(或變得可見或活動)?Names Default To Here(1);
lb_values = {"Tech1", "Tech2", "Tech3"};
cb_values = {"Sage1_Tech1", "Sage2_Tech1", "Sage3_Tech1", "Sage4_Tech1", "Sage5_Tech1", "Sage6_Tech1",
"Sage1_Tech2", "Sage2_Tech2", "Sage3_Tech2", "Sage4_Tech2", "Sage5_Tech2", "Sage6_Tech2",
"Sage1_Tech3", "Sage2_Tech3", "Sage3_Tech3", "Sage4_Tech3", "Sage5_Tech3", "Sage6_Tech3"
};
expr_update_cb = Expr(
cur_sel = lb << get selected;
If(N Items(cur_sel),
cur_cb_values = Filter Each({val}, cb_values,
cur_tech = Word(2, val, "_");
Contains(cur_sel, cur_tech);
);
,
cur_cb_values = cb_values;
);
cb2 << Set items(cur_cb_values);
);
win = New Window("Select Tech & TestStage", <<MODAL></MODAL>回覆:如何根據模式視窗中的先前選擇更改複選框(或變得可見或活動)?@jthi我不知道為什麼你重複發布你的原始腳本,但這是我必須要做的,仍然沒有按需要工作,也許結束看起來很近:) ?
Names Default To Here(1);
clear log ();
listInd = {}; p = N Items (listInd);
lb_values = {"Tech1", "Tech2", "Tech3"};
cb_values = {"Sage1_Tech1", "Sage2_Tech1", "Sage3_Tech1", "Sage4_Tech1", "Sage5_Tech1", "Sage6_Tech1",
"Sage1_Tech2", "Sage2_Tech2", "Sage3_Tech2", "Sage4_Tech2", "Sage5_Tech2", "Sage6_Tech2",
"Sage1_Tech3", "Sage2_Tech3", "Sage3_Tech3", "Sage4_Tech3", "Sage5_Tech3", "Sage6_Tech3"
};
expr_update_cb = Expr(
cur_sel = lb << get selected;
If(N Items(cur_sel), cur_cb_values = Filter Each({val}, cb_values, cur_tech = Word(2, val, "_"); Contains(cur_sel, cur_tech))
,
cur_cb_values = cb_values;
);
p = N Items(cur_sel);
cb2 << Set items(cur_cb_values); show (cur_cb_values);
);
win = New Window("Select Tech & TestStage", <<MODAL></MODAL>
回覆:如何根據模式視窗中的先前選擇更改複選框(或變得可見或活動)?很可能是我壞了的控制鍵不允許我複製正確的腳本,而且我發布得太快了。 現在應該修復了。
回覆:如何根據模式視窗中的先前選擇更改複選框(或變得可見或活動)?@jthi謝謝。 您今天更新的腳本正在運行。 我很想知道我今天的做法(我今天的腳本)是否是錯誤的方法。
另外,如果我輸入,為什麼日期查詢不顯示TB3和CB3頂部的部分,即上面的部分TB1?
(想法是讓用戶先選擇日期)
回覆:如何根據模式視窗中的先前選擇更改複選框(或變得可見或活動)?我的猜測是你缺少“,”或者你有“;”在錯誤的地方
回覆:如何根據模式視窗中的先前選擇更改複選框(或變得可見或活動)?@jthi我的「,」放置似乎是正確的,但當放置在頂部時我仍然無法使日期查詢工作。
另外,如何傳回“選擇的值”全選「? 我原來的位置返回2似乎只適用於手動選擇。
回覆:如何根據模式視窗中的先前選擇更改複選框(或變得可見或活動)?當使用者按下「確定」時,我會將所有值放入變數中,而不是當使用者更改其選擇時。
回覆:如何根據模式視窗中的先前選擇更改複選框(或變得可見或活動)?@jthi謝謝,但我只能透過我的放置重新調整手動選擇返回2在 - 的裡面cb2=複選框(..
請你指出我要放置的地方cb2 << 取得選擇();僅當使用者按下時觸發好的。
回覆:如何根據模式視窗中的先前選擇更改複選框(或變得可見或活動)?腳本編寫指南 > 顯示樹 > JSL 中的模態視窗 > 建構模態視窗使用模態解釋新視窗。 這應該給出一個示例,在哪裡放置命令以將值放入變數中
Names Default To Here(1);
nw = New Window("Example", <<MODAL></MODAL>
您也可以將其放置在 << On Validate 或 << On Close 中(例如,請參閱腳本索引和一些解釋),但我通常會將它們放置在「確定」按鈕內。
回覆:如何根據模式視窗中的先前選擇更改複選框(或變得可見或活動)?@jthi , 謝謝。
show(cb_sel);
作品。
回覆:如何根據模式視窗中的先前選擇更改複選框(或變得可見或活動)?@jthi當我討論這個主題時(而不是創建一個新線程來詢問新的但相關的問題),我想知道是否可以顯示一個文本,顯示用戶選擇每個測試階段時所做的操作。 下面貼了範例。文字僅在做出選擇時顯示,並保留到取消選取為止。

回覆:如何根據模式視窗中的先前選擇更改複選框(或變得可見或活動)?這絕對是可能的,但如何使其健壯且易於使用可能是另一回事。 以下是我想到的一個快速選擇(很可能有更好的選擇)
Names Default To Here(1);
cb_sel = {};
nw = New Window("Example", <<MODAL></MODAL>回覆:如何根據模式視窗中的先前選擇更改複選框(或變得可見或活動)?@jthi謝謝。 這正是所需要的,但我很難將其適應本線程中的原始範例(我的第一篇文章,包含 Tech 和 TestStage 腳本)。 如果您可以顯示一個/兩個選擇,我應該能夠完成其餘的工作。
我可以看到每個測試階段的文字都需要預先定義。
回覆:如何根據模式視窗中的先前選擇更改複選框(或變得可見或活動)?如果我為一個/兩個選擇編寫它,我基本上會重寫整個腳本,因為有很多事情需要考慮。 此外,如果您可以透過其他方式確定它們應該是什麼,則不必預先定義它們。
回覆:如何根據模式視窗中的先前選擇更改複選框(或變得可見或活動)?@jthi沒問題。 感謝您到目前為止對此主題的幫助。 您用於演示的腳本似乎要求單獨處理每個複選框以獲取附加文本,而在我最初的情況下,所有選項都位於一個列表中。
您能否給我一些指示,以便我可以在這篇文章中開始我的原始/第一個腳本?
我會嘗試自己做,然後帶著具體問題回來。
此外,在我的案例中,每個選定測試階段的文字將是預先定義測試參數的清單。 例如,對於第一個測試階段{A,B},對於第二測試階段{A,B,C,L,M}。
回覆:如何根據模式視窗中的先前選擇更改複選框(或變得可見或活動)?使用關聯數組來儲存不同的列表,建立表達式/函數來建立複選框和 ifbox 的收集器。
這不使用模式窗口,因為不使用模式窗口時開發起來要容易得多,因為您可以輕鬆地從腳本編輯器測試不同的獲取等
Names Default To Here(1);
tech_options = {"Tech1", "Tech2"};
stages_tech1 = {"Sage1_Tech1", "Sage2_Tech1"};
stages_tech1_text = {"First Level Tech1", "Second Level Tech1"};
stages_tech2 = {"Sage1_Tech2", "Sage2_Tech2"};
stages_tech2_text = {"First Level Tech2", "Second Level Tech2"};
aa_tech = Associative Array();
aa_tech["Tech1"] = Associative Array(stages_tech1, stages_tech1_text);
aa_tech["Tech2"] = Associative Array(stages_tech2, stages_tech2_text);
get_cbs = Expr(
cbs = cb_lub << XPath("//CheckBoxBox");
);
update_checkboxes = Expr(
tech_selections = lb << get selected;
cb_lub = Lineup Box(N Col(2));
For Each({tech_selection}, tech_selections,
For Each({{stage, text}}, aa_tech[tech_selection],
cb_lub << Append(Check Box(stage, << Set Function(function({this},
(this << sib) << Set(this << get);
))));
cb_lub << Append(IfBox(0, Text Box(text)))
);
);
Try((cb_collector << child) << Delete Box());
cb_collector << Append(cb_lub);
);
win = New Window("Select Tech & TestStage",
V List Box(
H List Box(
Spacer Box(Size(0, 300)), // to force height
V List Box(
Spacer Box(Size(300, 0)), // to force width
tb1 = Text Box("Select Tech", <<SET font="" style=""></SET>
