MatlabGUI,如何告诉两个变量都存在于uicontrol中 函数按钮8_回调(hObject、eventdata、handles) EndDate=handles.EndDate StartDate=句柄。StartDate 如果存在('EndDate') 如果存在(“开始日期”) 如果(datenum(EndDate,'yyyy/mm/dd')

MatlabGUI,如何告诉两个变量都存在于uicontrol中 函数按钮8_回调(hObject、eventdata、handles) EndDate=handles.EndDate StartDate=句柄。StartDate 如果存在('EndDate') 如果存在(“开始日期”) 如果(datenum(EndDate,'yyyy/mm/dd'),matlab,user-interface,exists,Matlab,User Interface,Exists,在执行EndDate=handles.EndDate之前,请尝试检查handles.EndDate是否存在,如果EndDate不存在,则该操作将失败。可能会出现以下情况: function pushbutton8_Callback(hObject, eventdata, handles) EndDate = handles.EndDate StartDate = handles.StartDate if exist('EndDate') if exist('StartDate')

在执行
EndDate=handles.EndDate
之前,请尝试检查
handles.EndDate
是否存在,如果
EndDate
不存在,则该操作将失败。可能会出现以下情况:

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
函数按钮8_回调(hObject、eventdata、handles)
如果~isfield(句柄,'EndDate')| | ~isfield(句柄,'StartDate'))
%如果EndDate或StartDate都不存在,请调用makesureboth
确保两者
否则%两个变量都存在

如果(datenum(handles.EndDate,'yyyy/mm/dd')作为@David答案的替代,您还可以通过直接在用于输入StartDate和EndDate的uicontrol中进行检查来省去检查字段是否存在的麻烦(我猜这是一个编辑框?)


如果可能的话,您可以在按钮回调的开头添加一个验证步骤,检查输入的日期是否有效,如果有效,请继续。这可能会为您以后节省一些麻烦,因为您首先要确保用户输入正确的值。这并不能直接回答您的问题,但对于c来说太长了注意:)

isfield
以及逻辑短路。我正要说…
存在
可能不喜欢这样。;+1现在!直到看到你的评论,我才意识到
exist
在struct上不起作用!不确定为什么不应该这样做?当您将某个内容传递给
exist
时,它是一个字符串,这意味着它必须解析出“.”前面的结构名称,然后自己运行
isfield
。他们可能没有实现这一点,因为当您开始考虑嵌套结构或非标量结构时,这将是一堆蠕虫。而且,传递整个过程可能会稍微有点错误:如果返回false,是否意味着结构不存在或字段不存在?您解决了我的问题,这是一个完美的答案!非常感谢!
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