Copy/Paste from ListBox at runtime

5 ビュー (過去 30 日間)
Cristian Berceanu
Cristian Berceanu 2024 年 12 月 9 日
コメント済み: Adam Danz 2024 年 12 月 9 日
Hello,
Is there a way to interactively select the entries in an AppDesigner ListBox and then copy them to a different application? Right-clicking on the elements in the list does not pop-up any context menu and also CTRL-C and CTRL-V do not seem to work...
Regards,
Cristian

採用された回答

Adam Danz
Adam Danz 2024 年 12 月 9 日
編集済み: Adam Danz 2024 年 12 月 9 日
Add a right-click "copy" option to ListBox
Create a context menu for the list box and set its MenuSelectedFcn to use clipboard.
For single-selection list boxes
fig = uifigure;
lb = uilistbox(fig,"Items",["Rhodope","Rila","Pirin"]);
lb.ContextMenu = uicontextmenu(fig);
m1 = uimenu(lb.ContextMenu ,'Text','Copy','MenuSelectedFcn',@(~,menuData)clipboard('copy',string(menuData.ContextObject.Value)));
For multiselect list boxes
m1 = uimenu(lb.ContextMenu ,'Text','Copy','MenuSelectedFcn',@(~,menuData)clipboard('copy',strjoin(menuData.ContextObject.Value,newline)));
  1 件のコメント
Adam Danz
Adam Danz 2024 年 12 月 9 日
> I hoped it would be just some option I could tick in the configuration options of the ListBox.
There is no such option but if you are applying this to many list boxes, you can wrap it into a function that you can easily apply to list boxes.
fig = uifigure;
lb = uilistbox(fig,"Items",["Rhodope","Rila","Pirin"]);
% Add copy option
applyCopyOption(lb)
% Add this function to your app
function applyCopyOption(listboxHandle)
fig = ancestor(listboxHandle,'figure');
listboxHandle.ContextMenu = uicontextmenu(fig);
uimenu(listboxHandle.ContextMenu ,'Text','Copy','MenuSelectedFcn',@(~,menuData)clipboard('copy',string(menuData.ContextObject.Value)));
% For multiselect listboxes:
% uimenu(lb.ContextMenu ,'Text','Copy','MenuSelectedFcn',@(~,menuData)clipboard('copy',strjoin(menuData.ContextObject.Value,newline)));
end

サインインしてコメントする。

その他の回答 (2 件)

Voss
Voss 2024 年 12 月 9 日
You can use the clipboard function.
You'd have to implement any context menu or ctrl+c behavior.
An example using a context menu:
f = uifigure();
lb = uilistbox(f,'MultiSelect','on');
cm = uicontextmenu(f);
uimenu(cm,'Text','Copy','MenuSelectedFcn',@(~,~)clipboard('copy',mat2str(string(lb.Value))));
lb.ContextMenu = cm;
To have ctrl+c do the copying, you can set the uifigure's KeyPressFcn or WindowKeyPressFcn. See more: uifigure properties

Cristian Berceanu
Cristian Berceanu 2024 年 12 月 9 日
Thank you for clarifying! I hoped it would be just some option I could tick in the configuration options of the ListBox. Seems it's not.
Regards, Cristian

カテゴリ

Help Center および File ExchangeGraphics Performance についてさらに検索

タグ

製品


リリース

R2024b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by