2015-11-13 32 views
0

我的目標是從uicontrol文本框中獲取用戶的輸入,對輸入執行操作,然後將輸出顯示到另一個文本框。 MATLAB給我的錯誤:uicontrol回調函數太多輸入參數

Error using 
UnitConverter/lbs2kg 
Too many input arguments. 

Error in 
UnitConverter>@(varargin)app.lbs2kg(varargin{:}) 
(line 22) 
       'Callback',@app.lbs2kg,'String',app.inputMass); 
Error while evaluating UIControl Callback 

這裏是我的代碼:

classdef UnitConverter < handle 


    properties 
     Figure     % Graphics handles 
     DispInputMass 
     DispOutputMass 

     inputMass    %Variables/Class Properties 
     outputMass 
    end 


    methods 

     function app = UnitConverter 
      % This is the "constructor" for the class 
      % It runs when an object of this class is created 
      app.Figure = figure('Name','Unit Converter') ; 

      app.DispInputMass = uicontrol('Style','edit',... 
       'Callback',@app.lbs2kg,'String',app.inputMass); 

      app.DispOutputMass = uicontrol(app.Figure,'Style','edit','Position'... 
       ,[168 100 47 26],'String','kg'); 
     end 



     function lbs2kg(app,evt) 
      app.inputMass = get(app.DispInputMass,'string'); 
      app.outputMass = app.inputMass*.453; 
      set(app.DispOutputMass,'string',app.outputMass); 
     end 


    end 
end 

回答

0

回調方法實際上有3個輸入 - MATLAB拋出這個錯誤,因爲它試圖以三個輸入發送到您的回調哪些寫入僅接受2. 3個輸入是(按順序):主要對象(app),發送事件(uicontrol)的對象和事件(matlab.ui.eventdata.ActionData)。

您可以將代碼更改爲以下,以得到它的工作:

function lbs2kg(app, obj, evt) 
    app.inputMass = get(app.DispInputMass,'string'); 
    app.outputMass = app.inputMass*.453; 
    set(app.DispOutputMass,'string',app.outputMass); 
end 

另外,你可以在函數的第一行更改爲以下:

function lbs2kg(varargin) 

斷點的代碼在回調的第一行並調查varargin的內容。有關varargin的更多幫助,請看這裏(http://www.mathworks.com/help/matlab/ref/varargin.html

+0

太棒了!謝謝你的幫助! – ih1358