尽管我使列表框变为多选,为什么我不能从列表框中执行多个删除任务?我需要你的帮助 。您可以在此处看到完整的脚本。
(function(){
$.win = new Window("palette");
var win = $.win;
win.orientation = "column";
win.alignChildren = ["center", "top"];
win.spacing = 10;
win.margins = 16;
var listbox1 = win.add("listbox", undefined, undefined, { name: "listbox1", multiselect: true, columnTitles: "Max", showHeaders: true });
listbox1.preferredSize.width = 136;
listbox1.preferredSize.height = 208;
var button1 = win.add("button", undefined, undefined, { name: "button1" });
button1.text = "Search";
var button2 = win.add("button", undefined, undefined, { name: "button2" });
button2.text = "Delete";
win.show();
var myNewArray = [];
button1.onClick = function Search() {
var compsArray = new Array();
var myProj = app.project;
myNewArray = [];
listbox1.removeAll();
for (var i = 1; i <= myProj.numItems; i++) {
if (myProj.item(i) instanceof CompItem) {
myNewArray = compsArray[compsArray.length] = myProj.item(i);
listbox1.add("item", myNewArray.name);
}
}
}
button2.onClick = function deletecomps() {
for (var s = 1; s <= app.project.numItems; s ++) {
if ((app.project.item(s) instanceof CompItem) && (app.project.item(s).name.match(listbox1.selection))) {
myComp = app.project.item(s);
break;
}
}
app.project.item(s).remove ();
}
})();
您的问题是第34行的listbox1.selection
if ((app.project.item(s) instanceof CompItem) && (app.project.item(s).name.match(listbox1.selection))) {
是一个数组,您正尝试将其与app.project.item(s).name
返回的字符串进行匹配,而该字符串永远不会匹配。
此外,您要达到的目标是什么
myComp = app.project.item(s);
break;
这里是onClick函数,但是可以。它将循环进行选择,并根据与组件名称匹配的列表框文本查找匹配的项目项。这很危险,因为相同的补偿名称会产生误报。我强烈建议您不要在生产代码中使用此技术,因为它肯定会给您的用户带来问题。
另外,我会将您将列表填充的部分变成单独的函数,并在单击删除后调用它,以便刷新列表,因为即使在删除伴奏之后,列表仍保持不变。 。
button2.onClick = function deletecomps() {
for (var b= 0; b < listbox1.selection.length; b++){
for (var s = 1; s <= app.project.numItems; s ++) {
if ((app.project.item(s) instanceof CompItem) && (app.project.item(s).name.match(listbox1.selection[b].text))) {
app.project.item(s).remove ();
}
}
}
}