由于 MATLAB 的面向对象特性,还有另外一个可能性。您可以定义自己的句柄类,并在初始化阶段将其作为附加参数传递给每个回调函数:
classdef Data<handle
properties (Access=public)
Val;
end
end
function SimpleGui
data = Data();
hLoad = uicontrol('Style', 'push', 'String', 'Push me', ...
'Callback', {@callback data});
data.Val = 5;
end
function callback(hSource, event, data)
data.Val = data.Val+1;
disp(data.Val);
end
另一个选项:
此外,关于 guidata
/appdata
(如@Chris所述),可以通过以下方式进行改进:
创建一个封装回调函数,始终获取并设置 guidata
:
function CallbackWrapper(hObj,evt,func)
data = guidata(hObj);
data = func(hObj,evt,data);
guidata(hObj,data);
end
现在您的回调函数应该按照以下方式定义(请注意不同的签名):
function SimpleGui
hSave = uicontrol('Style', 'push', 'String', 'Push me', ...
'Callback', {@CallbackWrapper @myCallBack});
data.x = 1;
guidata(hSave,data);
end
function data = myCallBack(hObj,evt,data)
data.x = data.x + 1;
disp(data.x);
end
guidata
,它是getappdata
的快捷方式。 - Andrey Rubshteinguidata
一次只能管理一个变量”。因此,您需要使用结构体,并根据需要添加字段。 - Chris