我正在尝试创建一个列表框,我可以动态添加或删除项目
设置如下:
不幸的是 - 从图片中可以看出 - 当我删除元素时,列表的总长度保持不变,而不是缩小列表,显示的列表现在包含空洞。
有谁知道如何避免这种行为?
到目前为止,这是我删除按钮的代码:
function btnDeleteLabel_Callback(hObject, eventdata, handles)
selectedId = get(handles.listbox_labels, 'Value'); % get id of selectedLabelName
existingItems = get(handles.listbox_labels, 'String'); % get current listbox list
existingItems{selectedId} = []; % delete the id
set(handles.listbox_labels, 'String', existingItems); % restore cropped version of label list
答案 0 :(得分:2)
删除"空"的最简单方法entries将使用remainingig项更新listbox
字符串。
有三种可能性:
upd_list={existingItems{2:end}}
upd_list={existingItems{1:end-1}}
upd_list={existingItems{1:selectedId-1} existingItems{selectedId+1:end}}
您还可以检查列表中的所有元素是否已被删除,在这种情况下,请禁用"删除" pushbutton
;在这种情况下,您必须在"添加" callback
。
btnDeleteLabel_Callback
的可能实施方式可能是:
% --- Executes on button press in btnDeleteLabel.
function btnDeleteLabel_Callback(hObject, eventdata, handles)
% hObject handle to btnDeleteLabel (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
selectedId = get(handles.listbox_labels, 'Value') % get id of selectedLabelName
existingItems = get(handles.listbox_labels, 'String') % get current listbox list
%
% It is not necessary
%
% existingItems{selectedId} = [] % delete the id
% Identify the items: if in the list only one ites has been added the
% returned list is a char array
if(class(existingItems) == 'char')
upd_list=''
set(handles.listbox_labels, 'String', upd_list)
else
% If the returned list is a cell array there are three cases
n_items=length(existingItems)
if(selectedId == 1)
% The first element has been selected
upd_list={existingItems{2:end}}
elseif(selectedId == n_items)
% The last element has been selected
upd_list={existingItems{1:end-1}}
% Set the "Value" property to the previous element
set(handles.listbox_labels, 'Value', selectedId-1)
else
% And element in the list has been selected
upd_list={existingItems{1:selectedId-1} existingItems{selectedId+1:end}}
end
end
% Update the list
set(handles.listbox_labels, 'String', upd_list) % restore cropped version of label list
% Disable the delete pushbutton if there are no more items
existingItems = get(handles.listbox_labels, 'String')
if(isempty(existingItems))
handles.btnDeleteLabel.Enable='off'
end
希望这有帮助,
Qapla'
答案 1 :(得分:0)
只需用正常括号替换单元格括号:
%existingItems{selectedId} = []; % replace this with next line
existingItems(selectedId) = [];