Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 调用在运行图形中定义的方法_Matlab_Class_Properties_Function Handle_Matlab App Designer - Fatal编程技术网

Matlab 调用在运行图形中定义的方法

Matlab 调用在运行图形中定义的方法,matlab,class,properties,function-handle,matlab-app-designer,Matlab,Class,Properties,Function Handle,Matlab App Designer,我有以下ui图: classdef gui < matlab.apps.AppBase ... function app = gui % Construct app end ... properties (Access = public) myFuncRef = @myFun end ... function myFun(app) % do something end ... end 但是我得

我有以下
ui图

classdef gui < matlab.apps.AppBase
   ...
   function app = gui
      % Construct app
   end
   ...
   properties (Access = public)
      myFuncRef = @myFun
   end
   ...
   function myFun(app)
      % do something
   end
   ...
end
但是我得到了错误

运行模拟时发生错误,模拟已停止 终止原因:未为值定义函数“subindex” 属于“matlab.graphics.GraphicsPlaceholder”类

提前谢谢

试试这个:

h = findobj(gcf,'-method','myFuncRef') 

让我知道它是否有效


问题可能是,您使用findobj(0,'type','figure')得到的只是您的体形,这只是一个由App类模拟的Grahics Obejct。

首先,我想解决您得到的错误。原因是调用
findobj()
返回的
h
为空。相反,您应该使用
findall(0,'Type','Figure',…)

我知道当您引用的方法是静态的时,这是可能的。考虑到以下类别:

classdef q45062561 < matlab.apps.AppBase

   properties (Access = public)
      myFuncRef = @q45062561.myFun
   end

   methods (Access = private, Static = true)
     function myFun()
        disp('This works!')
     end
   end

end
注意事项:

  • 我不是通过
    findobj
    找到图形的句柄,而是在创建过程中存储它
  • 问题中的
    myFun
    的修饰符不清楚,因此我不知道此解决方案是否适合您的情况
  • 就个人而言,我认为最好只定义方法
    public
    和/或
    static
    ,而不是使用存储在属性中的函数引用

  • 谢谢你的回复。我尝试了序列h=findobj(0,'class','gui');funcRef=get(h,'myFuncRef');funcRef(h);它给了我同样的错误。当我尝试h=findobj(gcf,'-method',myFuncRef')时,它不会给我一个错误,但会打开一个窗口,但它不起作用。
    h = findobj(0,'class','gui') 
    
    classdef q45062561 < matlab.apps.AppBase
    
       properties (Access = public)
          myFuncRef = @q45062561.myFun
       end
    
       methods (Access = private, Static = true)
         function myFun()
            disp('This works!')
         end
       end
    
    end