how to call a function inside a button created in a function?

Hello everyone, I created a function in matlab in which when I introduce some values they are printed on some static text and I create a button that allows me to delete the row where the button is (the variables I keep in a struct). My question is, how can I use the callback of the delete button within the function? I attached the code so you can understand it better
function [c,t,v,fn,ln,btn] = addInfo(countElement,E)
for i=1:countElement
c = uicontrol('Style','text',...
'String',i,...
'Position',[20 460-30*(i-1) 20 20]);
t = uicontrol('Style','text',...
'String',E(i).Type,...
'Position',[70 460-30*(i-1) 60 20]);
v = uicontrol('Style','text',...
'String',E(i).V,...
'Position',[145 460-30*(i-1) 35 20]);
fn = uicontrol('Style','text',...
'String',E(i).Fnode,...
'Position',[210 460-30*(i-1) 35 20]);
ln = uicontrol('Style','text',...
'String',E(i).Lnode,...
'Position',[275 460-30*(i-1) 35 20]);
btn = uicontrol('Style', 'pushbutton', 'String', '-',...
'Position', [330 460-30*(i-1) 35 20],...
'Callback', @deleteInfo%%my problem is here);
end
function [ c,t,v,fn,ln,btn ] = deleteInfo( c,countElement,E )
a=str2double(get(handles.c,'String'));
E(a)=[];
countElement=countElement-1;
for i=1:countElement
c = uicontrol('Style','text',...
'String',i,...
'Position',[20 460-30*(i-1) 20 20]);
t = uicontrol('Style','text',...
'String',E(i).Type,...
'Position',[70 460-30*(i-1) 60 20]);
v = uicontrol('Style','text',...
'String',E(i).V,...
'Position',[145 460-30*(i-1) 35 20]);
fn = uicontrol('Style','text',...
'String',E(i).Fnode,...
'Position',[210 460-30*(i-1) 35 20]);
ln = uicontrol('Style','text',...
'String',E(i).Lnode,...
'Position',[275 460-30*(i-1) 35 20]);
btn = uicontrol('Style', 'pushbutton', 'String', '-',...
'Position', [330 460-30*(i-1) 35 20],...
'Callback', @deleteInfo%%my problem is here);
end

 Accepted Answer

Start with saving all the handles in one or multiple arrays when you initialize them (save them to guidata so you can get to them in a callback). Then in the delete callback you can loop through the array, moving all elements after the deleted object one level up.

2 Comments

I save it in the gui, my problem is that I don't know how to call the function in the delete button.
This is the code that I use when i call the addInfo function. First of all i add the element to the struct, and every time that I add an element i refresh the print. The function that delete the element that i selected do the same, but in this case i move all the elements one position.
Thanks for your answer!
function addElement_Callback(hObject, eventdata, handles)
% hObject handle to addElement (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global label value fnode lnode
[handles.E, handles.countElement]=add_Element( handles.E,handles.countElement,label,value,fnode,lnode );
[handles.c,handles.t,handles.v,handles.fn,handles.ln,handles.btn]=addInfo(handles.countElement,handles.E);
guidata(hObject,handles);
I'm sorry, but I don't really understand what it is you still need to fix.
Another point: don't use globals. Set them as fields of handles.

Sign in to comment.

More Answers (0)

Categories

Find more on Interactive Control and Callbacks in Help Center and File Exchange

Asked:

on 27 Nov 2017

Commented:

Rik
on 27 Nov 2017

Community Treasure Hunt

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

Start Hunting!