Kevin Zheng
Kevin Zheng

Reputation: 21

Within Matlab GUI, I want to transfer the selected data in listbox1 to listbox2

This case is, I know how to transfer all the data from one listbox to another one, and then clear listbox1. I did in this way: function pushbutton1_Callback(hObject, eventdata, handles)

StringInLB1 = get(handles.listbox1,'string');

set(handles.listbox2,'string',StringInLB1);

set(handles.listbox1,'string','');

Now my question is: How can I transfer some selected data to listbox2 ? I "ctrl+ single click" multiple data in listbox1, but how can I use thoes data?

Thanks a lot.

Upvotes: 0

Views: 658

Answers (2)

Benoit_11
Benoit_11

Reputation: 13945

It looks like you are looking to assign some function to the listbox callback. i.e. each time the selection is changed by the user, you want to do something with the data. Anyhow that's what I understood from your comment to @James answer.

If it's the case, here is a sample code generating a simple GUI in which the color of a plot is changed by the user directly by clicking in the listbox:

function DummyListBox

global hFig hListBox hPlot
ScreenSize = get(0,'ScreenSize');

hFig = figure('Visible','off','Position',[ScreenSize(3)/2,ScreenSize(4)/2,450,285]);

ColorString = {'Red';'Green';'Blue'}; % Define string populating the listbox

hListBox = uicontrol('Style','Listbox','String',ColorString,'Position',[315,150,70,50],'max',3,...
    'min',1,'Callback',@ListBox_Callback); %%// added 'min' and 'max' properties to select multiple items

hText = uicontrol('Style','Text','Position',[315,220,70,35],'String','Empty now'); %%// Add text box

hAxes = axes('Units','Pixels','Position',[50,60,200,185]);

set(hFig,'Visible','on')

x = 1:5*pi;
hPlot = plot(x,sin(x),'-r','Parent',hAxes); %display some data

    % Listbox callback: each time the selection changes, the color of the
    % plot changes accordingly.
    function ListBox_Callback(~,~)

       SelectedValues = get(hListBox,'Value'); % Get the values selected

    set(hText,'String',SelectedValues); % Uptdate the string in the textbox

    NewColor = ColorString{get(hListBox,'Value')};
    set(hPlot,'Color',NewColor)
    end

end

The output now looks like this:

enter image description here

As you see the function in which the change in color takes place is the listbox's callback. Hope this is what you want. If not please be more specific as to what you would like. Thanks!

EDIT: As you can see, I added a text box to show you what it looks like when you select multilpe items in the listbox. In order to do so, you must add a 'min' and a 'max' property when you create the listbox. I set them to 1 and 3, respectively. The 'Value' property of the listbox corresponds to the actual number of the item selected from the list. So if you have 3 items as is my exmample,the Value can be 1,2,3 or any combination. They are displayed in the text box. You can get the corresponding data from those values, stored in vectors.

So to answer your question, you could write:

Data1 = ValuesVector(1)
Data2 = VectorValues(2)
... and so on

Upvotes: 0

James
James

Reputation: 753

If you use a

tmp = get(handles.listbox1,'string');

You'll see what the variable is like. Then you can use something like

set(handles.listbox1,'string',tmp{2});

Upvotes: 0

Related Questions