Selective selection in listbox

6 visualizaciones (últimos 30 días)
Lucien Robinault
Lucien Robinault el 19 de Dic. de 2017
Comentada: Image Analyst el 17 de Nov. de 2018
Hello, I was looking for a way to control further the possibility of selection (modification of the property 'Value' of a listbox) to make only the items who are present in the listbox. Indeed as seen in the image,
there is only four items in the listbox, but it is possible to select a non existent item by being able to select 'Value' that will be off limit from the box. It happen to cause an error when i use a delete function because of this over permissive selection. After many research on the forum and other place I couldn't manage to find ways to limit the value of the 'Value' property.
Thanks in advance for your help and time.
ps : I'm using the Matlab 2011b version
  4 comentarios
Lucien Robinault
Lucien Robinault el 20 de Dic. de 2017
@Adam Indeed you are right it appear that the property Value is acting strangely and as Image Analyst speculated, it look like there is empty elements created during the populating process. Here is the code I use to populate the String property.
handles.counter is a variable that count the action stocked in a list of struct. I think the problem may come from the | who appear to be some special character in Matlab if I'm right.
if handles.counter == 0 %if no action print an empty list and prevent negative counter
lboxActions = ('');
set(handles.pushbutton_removeAction,'Enable','off');
else
lboxActions = cell(handles.counter); %pre-allocation
for i=1:handles.counter %check for the type of movement for adequat display of the speed
if handles.actionList(handles.counter).movement == 1
infoAction = strcat(num2str(i),'|spd:',num2str(handles.actionList(i).speed),'|',num2str(handles.actionList(i).duration),'|',num2str(handles.actionList(i).delayBefore),',',num2str(handles.actionList(i).delayAfter));
else
infoAction = strcat(num2str(i),'|spd:-',num2str(handles.actionList(i).speed),'|',num2str(handles.actionList(i).duration),'|',num2str(handles.actionList(i).delayBefore),',',num2str(handles.actionList(i).delayAfter));
end
lboxActions{i} = infoAction; %compile cell array of names.
end
set(handles.listbox_actionList,'Max',handles.counter+1) % putting the max up to allow display of the adequat number of action
set(handles.listbox_actionList,'String',lboxActions);%print
Btw it look like the function of listBox have changed since 2011b because I can't find any property call ItemsData
Image Analyst
Image Analyst el 20 de Dic. de 2017
There were a lot of changes starting with R2014b. What version are you using?
Did my solution below work?
What is handles.counter? Is it supposed to be the number of items in the listbox? Why are you setting the 'Max' property? As I remember it, it was just 1 or 2 depending on whether you want it to be single selection or multiselection, not some arbitrary number.

Iniciar sesión para comentar.

Respuestas (1)

Image Analyst
Image Analyst el 19 de Dic. de 2017
Try this:
listBoxItems = handles.listbox1.String;
selectedItems = [];
for k = 1 : length(listBoxItems)
if length(strtrim(listBoxItems{k})) > 0
% Only select items that are not all whitespace.
selectedItems = [selectedItems, k];
end
end
handles.listbox1.Value = selectedItems;
  2 comentarios
ET1994
ET1994 el 17 de Nov. de 2018
Image Analyst, I want to choose a care from the listbox and set an if statement if one is chosen from the list the corresponding x% appear in a static Text.
Can you help for the coding?
Capture.JPG
Image Analyst
Image Analyst el 17 de Nov. de 2018
selectedItem = handles.listbox1.Value
if selectedItem == 3
% Accident, so do whatever. It's the third item after Keyword and a blank line.
elseif selectedItem == 4
% Childbrith, so do whatever.
etc.

Iniciar sesión para comentar.

Categorías

Más información sobre Migrate GUIDE Apps en Help Center y File Exchange.

Productos

Community Treasure Hunt

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

Start Hunting!

Translated by