Kopieren von Listbox-Inhalten mit LF-Begrenzern anstelle von Tabulatoren?Wenn ich den markierten Inhalt einer Listbox kopiere, erhalte ich eine durch Tabulatoren getrennte Zeichenfolge. Ich möchte jedoch, dass jeder ausgewählte Eintrag in einer eigenen Zeile steht.
nw = new window("test",
lb = list box({"AAAAA", "BBBBB", "CCCCC", "DDDDD"}, width(100),
max selected(-1),
nlines(8)
)
);
Wenn ich die letzten drei Einträge markiere und mit der rechten Maustaste kopiere

Ich bekomme diese Zeichenfolge:
BBBBB CCCCC DDDDD
Was ich will ist folgendes:
BBBBB
CCCCC
DDDDD
Ich kann meine eigene Schaltfläche "In Zwischenablage kopieren" erstellen, mit der die Konvertierung durchgeführt wird. Gibt es jedoch einen einfacheren Weg?
Betreff: Kopieren von Listbox-Inhalten mit LF-Begrenzern anstelle von Tabulatoren?Sie können versuchen, am Ende jedes Werts \! n einzufügen, und prüfen, ob Sie damit das erhalten, was Sie wollen. Es wäre ein Kluge, aber es könnte die Arbeit erledigenBetreff: Kopieren von Listbox-Inhalten mit LF-Begrenzern anstelle von Tabulatoren?Interessante Idee Jim, aber die resultierende Listbox zeigt Leerzeichen. Wenn ich Zeilen hervorhebe und STRG-C drücke, werden die eingefügten Ergebnisse in separaten Zeilen angezeigt, aber die Registerkarten sind noch vorhanden.
Ich habe mehrere Listenfelder, aus denen Leute kopieren möchten. Ich habe oben auf jedem Knopf eine eigene Taste, die diese Logik verwendet:
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)
)
);
Betreff: Kopieren von Listbox-Inhalten mit LF-Begrenzern anstelle von Tabulatoren? @pmroz ,
Ihre Lösung ist nicht so schlecht, außer für die Verwaltung von Schaltflächenfeldern und Listenfeldern. Sie können jedoch relative Objektreferenzen verwenden: Jede Schaltfläche "Kopieren" und jede ListBox sind in einem VListBox-Container verschachtelt und werden für die ButtonBox verwendet << Set Function (Funktion ({this} ...)) wo die Listbox als referenziert werden kann (diese << sib) << wird ausgewählt , usw. Ein Skriptbeispiel mit dem Namen Copy_ButtonBoxSib.jsl ist beigefügt. Dies ist wahrscheinlich nicht neu für Sie, nur als Information für andere im Community-Blog.
EIN ListBox () hat eine Option zu << Kontextskript setzen () . Bei einem Kontextmenüskript ist die Schaltfläche "Kopieren" nicht erforderlich.
Ich habe nicht herausgefunden, ob es eine Methode gibt, sich im Menü-Skript zu referenzieren. Hier ist ein einfaches Skript mit 3 ListBox mit einem zu kopierenden Kontextmenüskript:
- Gegenstände auswählen
- Klicken Sie mit der rechten Maustaste in die ListBox, und wählen Sie "Kopieren" aus.
- Ich habe eine Schaltfläche platziert, um den Text einzufügen, um dies zu testen
Siehe Screenshot und Skript.

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>Betreff: Kopieren von Listbox-Inhalten mit LF-Begrenzern anstelle von Tabulatoren?Vielen Dank @ gzmorgan0 Das ist eine wirklich coole Technik. Jetzt muss ich meine Benutzer darin schulen, mit der rechten Maustaste auf> Kopieren zu klicken, anstatt STRG-C zu verwenden.
Betreff: Kopieren von Listbox-Inhalten mit LF-Begrenzern anstelle von Tabulatoren?Sie können das Kästchen in der Funktion auswerten, um eine Selbstreferenzfunktion zu senden.
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 * Zuletzt habe ich überprüft, dass diese Methode beim Verschlüsseln nicht funktioniert.
Betreff: Kopieren von Listbox-Inhalten mit LF-Begrenzern anstelle von Tabulatoren?Danke @ vince_faller . Dies macht eine for-Schleife überflüssig.
Das substitute () übergibt den JMP-Parser, bei dem die sofortige Zuweisung der Eigenschaft nicht funktioniert hat. Gute Arbeit.