你好,
我有一个大纲框,它有一个与之关联的菜单脚本。 该菜单脚本有几个菜单项,其中一些有子菜单。许多子菜单包含一组相互排斥的选项,我想在它们被选中时打勾,同时取消选中所有选项(例如,如果我的子菜单设置表中的小数位数到 1、2、3 或 4,然后如果我选择“2”,我将要选中“2”项,并取消选中“1”、“3”和“4”项)。
我仍在开发这个应用程序,所以当我添加新选项和/或修改现有选项时,实际的菜单结构会不断变化。 因此,我希望避免对上述检查/取消检查过程进行硬编码。 相反,我想自动识别我刚刚在哪个子菜单中单击了一个项目,然后只运行一个小函数来清除同一子菜单中的所有刻度,然后检查我刚刚单击的项目。如果我可以让我的脚本告诉我刚刚单击了哪个菜单项,我可以在“<< get submenu”属性的帮助下做到这一点。
我可以为每个菜单项设置一个计数变量(即“M=1”为第一个菜单项,“M=2”为第二个,“M=3”为第三个等等),然后只引用的值M 来计算我刚刚单击了哪个项目(正如我在下面的小示例中所做的那样,我已经制作了只是为了说明问题),但是我必须在每次菜单时更改所有分配已编辑 - 这反而违背了练习的目标。
这可以做到吗? 我看不到可以为我提供此信息的大纲框的任何属性。
非常感谢
expr_POD =表达式(为了(我= 1 , 我<= 4 , i++, My_OutlineBox <<设置菜单项状态( 1 +我, 0 )); My_OutlineBox <<设置菜单项状态( 1 +荚, 1 ));
expr_Rec =表达式(为了(我= 1 , 我<= 3 , i++, My_OutlineBox <<设置菜单项状态( 6 +我, 0 )); My_OutlineBox <<设置菜单项状态( 6 +录音, 1 ));
expr_Doc =表达式(为了(我= 1 , 我<= 4 , i++, My_OutlineBox <<设置菜单项状态( 10 +我, 0 )); My_OutlineBox <<设置菜单项状态( 10 +文档, 1 ));
My_OutlineBox =大纲框( “我的大纲框” ,
文本框( “橱窗里的一些东西” ),
<<设置菜单脚本(
{
“小数点” , " " ,
“1 个吊舱” , 点= 1 ; expr_POD,
“2 荚” , 点= 2 ; expr_POD,
“3 荚” , 点= 3 ; expr_POD,
“4 荚” , 点= 4 ; expr_POD,
“接受者” , " " ,
“研发” , 建议 = 1 ; expr_Rec,
“营销” , 建议 = 2 ; expr_Rec,
“预售” , 建议 = 3 ; expr_Rec,
“文件格式” , " " ,
《四开本》 , 文档= 1 ; expr_Doc,
“傻瓜” , 文档= 2 ; expr_Doc,
“A4” , 文档= 3 ; expr_Doc,
“药片” , 文档= 4 ; expr_Doc,
“电子邮件” , 文档= 5 ; expr_Doc
}
),
/* 定义子菜单 */
<<设置子菜单( 1 , 4 ),
<<设置子菜单( 6 , 3 ),
<<设置子菜单( 10 , 5 ),
/* 设置默认值 */
<<设置菜单项状态( 2 , 1 ),
<<设置菜单项状态( 7 , 1 ),
<<设置菜单项状态( 11 , 1 )
);
新窗户( “西北” ,
My_OutlineBox
);
谢谢贾斯汀-我会这样做的。我过去几次发现我忽略了一个解决问题的属性,只是因为我没有意识到它与手头问题的相关性——所以很高兴知道我没有错过一些明显的东西在这种场合。
非常感谢您的帮助
您是对的,没有用于获取所选菜单项索引的 JSL 消息,例如 <
我建议不要像上面那样使用三个不同的表达式,而是使用具有三个参数的函数。 使用函数消除了对无关变量的需求,还简化了以后添加新菜单项的过程,并减少了代码重复。 有关详细信息,请参见下面的示例。
setMenuChecked = Function(
{
startIndexForSubgroup, // The index of the first menu item for this subgroup
endIndexForSubgroup, // The index of the last menu item for this subgroup
indexOfSelectedItem // The index of the item that was just selected
},
{i},
For( i = startIndexForSubgroup, i <= endIndexForSubgroup, i++,
My_OutlineBox << set menu item state( i, 0 )
);
My_OutlineBox << set menu item state( indexOfSelectedItem, 1 );
);
My_OutlineBox = Outline Box( "My OutlineBox",
Text Box( "Some stuff in the window" ),
<<SET menu="" script=""></SET>