如何根据模式窗口中的先前选择更改复选框(或变得可见或活动)?在下面的脚本中,我想执行以下操作:
根据 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>
