使用LF分隔符而不是制表符复制列表框内容?如果复制列表框的突出显示内容,则会得到制表符分隔的字符串。 但是我希望每个选定的条目都在自己的行上。
nw = new window("test",
lb = list box({"AAAAA", "BBBBB", "CCCCC", "DDDDD"}, width(100),
max selected(-1),
nlines(8)
)
);
如果我突出显示最后三个条目并右键单击复制

我得到这个字符串:
BBBBB CCCCC DDDDD
我想要的是:
BBBBB
CCCCC
DDDDD
我可以创建自己的“复制到剪贴板”按钮来进行转换,但是有没有更简单的方法?
Re:用LF分隔符而不是制表符复制列表框内容?您可以尝试在每个值的末尾添加\!n,看看是否能满足您的需求。这将是一团糟,但可能会完成工作Re:用LF分隔符而不是制表符复制列表框内容?有趣的想法Jim,但结果列表框显示空白。 当我突出显示行并按CTRL-C时,粘贴的结果位于单独的行中,但选项卡仍然存在。
我有多个列表框,人们希望从中复制它们。在每个使用此逻辑的按钮的顶部都有一个专用按钮:
lf = "
";
nw = new window("test",
cb = button box("Copy to Clipboard",
selected_items = lb << get selected;
if (nitems(selected_items) > 0,
set clipboard(concat items(selected_items, lf)),
),
),
lb = list box({"AAAAA", "BBBBB", "CCCCC", "DDDDD"}, width(100),
max selected(-1),
nlines(8)
)
);
Re:用LF分隔符而不是制表符复制列表框内容? @pmroz ,
除了管理按钮框和列表框之外,您的解决方案还不错。但是,您可以使用相对对象引用:每个“复制按钮”和“列表框”都嵌套在VListBox容器中,对于ButtonBox,请使用 << Set Function(函数({this} ...) 列表框可以引用为 (此<<同胞)<<被选中等 附加了一个名为Copy_ButtonBoxSib.jsl的脚本示例。 这对您来说可能并不新鲜,只是在社区博客上作为对其他人的仅供参考。
一种列表框() 可以选择 <<设置上下文脚本() 。使用上下文菜单脚本时,不需要复制按钮。
我还没有弄清楚菜单脚本中是否有引用自己的方法。这是一个带有3 ListBox的简单脚本,带有要复制的上下文菜单脚本:
- 选择项目
- 右键单击列表框,将出现“复制”,将其选中。
- 我放置了一个按钮来粘贴文本进行测试
请参阅屏幕截图和脚本。

Names Default to Here(1);
lf = "\!N";
mylb =Function({usrlist}, {lb},
lb = ListBox(usrlist, width(100), max selected(-1), nlines(8));
lb
);
mycopy = Function({this}, {sel},
sel = this << get selected;
if(nitems(sel)>0, set clipboard(concat items(sel,lf)) )
);
mylist1 = {"AAAAA", "BBBBB", "CCCCC", "DDDDD"};
mylist2 = {"xxxxx", "yyyyy", "zzzzz", "wwwww"};
mylist3 = {"dog", "cat", "parrot", "hamster"};
lb1 = mylb(mylist1);
lb2 = mylb(mylist2);
lb3 = mylb(mylist3);
list_lb = {lb1, b2,lb3};
Names Default To Here( 1 );
New Window( "Example",
VlistBox(
HListbox(lb1,lb2,lb3),
ButtonBox("show It", <<SETFUNCTION></SETFUNCTION>Re:用LF分隔符而不是制表符复制列表框内容?谢谢 @ gzmorgan0 这是一个非常酷的技术。 现在,我必须训练我的用户右键单击>复制,而不是使用CTRL-C。
Re:用LF分隔符而不是制表符复制列表框内容?您可以评估函数中的框以发送自引用函数。
mylb =Function({usrlist}, {lb},
lb = ListBox(usrlist, width(100), max selected(-1), nlines(8));
Eval(Substitute(
Expr(DV_LB << Set Context Menu Script({"Copy", mycopy(DV_LB)})),
Expr(DV_LB), lb
));
lb;
);
* CAVEAT *最后,我检查了加密后此方法不起作用。
Re:用LF分隔符而不是制表符复制列表框内容?谢谢 @vince_faller 。 这消除了for循环的需要。
replace()传递JMP解析器,在该解析器中,立即分配属性无效。 很好的工作。