2015-11-13 11 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 входа (в порядке): основной объект (приложение), объект, отправляющий событие (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) 

Breakpoint Свода на первую строку обратного вызова и исследовать содержимое varargin. Для получения дополнительной информации о varargin см. Здесь (http://www.mathworks.com/help/matlab/ref/varargin.html)

+0

Отлично! Спасибо за вашу помощь! – ih1358