2014-10-21 3 views
0
function pushbutton8_Callback(hObject, eventdata, handles) 
EndDate = handles.EndDate 
StartDate = handles.StartDate 
if exist('EndDate') 
    if exist('StartDate') 
     if(datenum(EndDate,'yyyy/mm/dd')<datenum(StartDate,'yyyy/mm/dd')) 
      StartDateEarlierThanEndDate 
     else 
      Correct 
     end 
    else 
     makesureboth 
    end 
end 

EndDate и StartDate будут выбраны пользователями. Если EndDate находится раньше StartDate, появится GUI, в котором говорится, что «StartDate должен быть раньше, чем EndDate». Если пользователь выбирает только EndDate или StartDate, выдается графический интерфейс «Убедитесь, что вы выбрали как StartDate, так и EndDate». EndDate и StartDate приходят из другого uicontrol.Matlab GUI, как сказать, как переменные существуют в UIControl

Если пользователь не выбирает как StartDate и EndDate, он дает ошибку Reference to non-existent field 'EndDate' или Reference to non-existent field 'StartDate'. Я знаю причину этой ошибки, но я не знаю, как ее решить.

+0

'isfield' вместе с логическим коротким замыканием. – chappjc

ответ

1

Попробуйте проверить, существует ли handles.EndDateEndDate=handles.EndDate, что не удастся, если EndDate не существует. Может быть, что-то вдоль линий следующим:

function pushbutton8_Callback(hObject, eventdata, handles) 
if ~isfield(handles,'EndDate') || ~isfield(handles,'StartDate') 
    % if either EndDate or StartDate do not exist, call makesureboth 
    makesureboth 
else % both variables exist 
    if(datenum(handles.EndDate,'yyyy/mm/dd')<datenum(handles.StartDate,'yyyy/mm/dd')) 
     StartDateEarlierThanEndDate 
    else 
     Correct 
    end 
end 
+0

Я как раз собирался сказать ... «существует» может не понравиться. ;) +1 сейчас! – chappjc

+0

Я не понимал, что 'exist' не работал над struct, пока я не увидел ваш комментарий! Не знаете, почему это не должно быть? – David

+0

Когда вы передаете что-то в 'exist', это строка, что означает, что ей нужно будет разобрать имя структуры до«. ». а затем запустить 'isfield' самостоятельно. Вероятно, они не реализовали это, потому что это была бы червь из червей, когда вы начнете думать о вложенных структурах или нескалярных структурах. Кроме того, может быть несколько более склонным к ошибкам передать все это: если бы он вернулся с ошибкой, это означало бы, что структура не существует или поле или нет? – chappjc

0

В качестве альтернативы @ ответ Давида, вы можете также избавляют от необходимости проверки наличия поля путем проверки непосредственно в UIControl используется для ввода StartDate и EndDate (Я думаю, это окно редактирования?).

Если возможно, вы можете добавить этап проверки в начале обратного вызова кнопки и проверить, действительны ли введенные даты, и если это так. Это может сэкономить вам некоторые проблемы позже, поскольку вы убедитесь, что пользователь вводит правильные значения в первую очередь. Это не отвечает непосредственно на ваш вопрос, но это слишком долго для комментария :)

Смежные вопросы