2017-01-09 38 views
0

我想用MATLAB的用户界面创建一个日期时间矢量,到目前为止我已经创建了所有的编辑框和按钮,它们工作正常,但有2个小问题我面临只有当回调函数调用时才生成矢量

1)pushbutton_cb3函数只从编辑骨骼中检索日期字符串,只有当我按下日期输入时,我如何删除它? 2)我想funtion pushbutton_cb3返回地方我在代码中所提到的值,函数waitfor看起来很不错,但我不知道如何在这里使用它 帮助将高度赞赏

function AddClassCalender 
f = figure('Name', 'AddClassCalender'); 
EditBoxHandle1 = uicontrol(f, 'Style', 'Edit','Tag','edit1',... 
    'Units','normalized','Position', [0.05 0.9 0.2 0.05], 'Callback',@edit_callback); 
EditBoxHandle2 = uicontrol(f, 'Style', 'Edit','Tag','edit2', ... 
    'Units','normalized','Position', [0.3 0.9 0.2 0.05], 'Callback',@edit_callback2); 
ButtonHandle1 = uicontrol(f, 'Style', 'PushButton', ... 
    'String', 'Select the starting date', ... 
    'Units','normalized','Position', [0.05 0.85 0.22 0.05], ... 
    'callback', @pushbutton_cb1); 
ButtonHandle2 = uicontrol(f, 'Style', 'PushButton', ... 
    'String', 'Select the starting date', ... 
    'Units','normalized','Position', [0.3 0.85 0.22 0.05], ... 
    'callback', @pushbutton_cb2); 
TextHandle = uicontrol(f, 'Style', 'Text', ... 
    'String', 'Interval(mins):', ... 
    'Horizontalalignment', 'left', ... 
    'Units','normalized','Position', [0.6 0.9 0.2 0.05]); 
EditBoxHandle3 = uicontrol(f, 'Style', 'Edit','Tag','edit3', ... 
    'Units','normalized','Position', [0.7 0.9 0.2 0.05], 'Callback',@edit_callback3); 
ButtonHandle3 = uicontrol(f, 'Style', 'PushButton', ... 
    'String', 'Generate', ... 
    'Units','normalized','Position', [0.7 0.85 0.2 0.05], ... 
    'callback', @pushbutton_cb3); 
%% I WANT THE PUSHBUTTON TO RETURN THE DATETIME VECTOR HERE SO I CAN USE IT FURTHER MORE 
uiwait(f) 
    function pushbutton_cb1(hcbo, eventStruct) 
     uicalendar('Weekend', [1 0 0 0 0 0 1], ... 
      'SelectionType', 1, ... 
      'DestinationUI', EditBoxHandle1); 
    end 
    function pushbutton_cb2(hcbo, eventStruct) 
     uicalendar('Weekend', [1 0 0 0 0 0 1], ... 
      'SelectionType', 1, ... 
      'DestinationUI', EditBoxHandle2); 
    end 
    function edit_callback(hcbo, eventStruct) 
     Date = hcbo.String; 
     hcbo.UserData = Date; 
    end 
    function edit_callback2(hcbo, eventStruct) 
     Date = hcbo.String; 
     hcbo.UserData = Date 
    end 
    function edit_callback3(hcbo, eventStruct) 
     Interval = hcbo.String; 
     hcbo.UserData = Interval 
    end 


    function pushbutton_cb3(hcbo, eventStruct) 
     date1 = findobj('Tag','edit1'); 
     date2 = findobj('Tag','edit2'); 
     interval = findobj('Tag','edit3'); 
     data1 = date1.UserData 
     data2 = date2.UserData 
     int_str = interval.UserData 
     interv = str2num(int_str) 
     interval_cal = 1/(1440/interv); 
     datevector = datetime(data1,'Format','dd-MMM-yyyy HH:mm:ss'):interval_cal:datetime(data2) 
    end 

回答

0

我不没有金融工具箱,所以让我们来看看我的例子,我手动输入字段中的日期(我检查确保输入的字符串不是uicalendar)。

您可以使用waitfor而不是uiwait。这样,只有当例外变量被改变时,应用才会继续(在我的例子中,我把数据放入ButtonHandle3.UserData

function [returnedVector] = AddClassCalender 

f = figure('Name', 'AddClassCalender'); 

EditBoxHandle1 = uicontrol(f, 'Style', 'Edit','Tag','edit1',... 
    'Units','normalized','Position', [0.05 0.9 0.2 0.05], 'Callback',@edit_callback); 
EditBoxHandle2 = uicontrol(f, 'Style', 'Edit','Tag','edit2', ... 
    'Units','normalized','Position', [0.3 0.9 0.2 0.05], 'Callback',@edit_callback2); 
ButtonHandle1 = uicontrol(f, 'Style', 'PushButton', ... 
    'String', 'Select the starting date', ... 
    'Units','normalized','Position', [0.05 0.85 0.22 0.05], ... 
    'callback', @pushbutton_cb1); 
ButtonHandle2 = uicontrol(f, 'Style', 'PushButton', ... 
    'String', 'Select the starting date', ... 
    'Units','normalized','Position', [0.3 0.85 0.22 0.05], ... 
    'callback', @pushbutton_cb2); 
TextHandle = uicontrol(f, 'Style', 'Text', ... 
    'String', 'Interval(mins):', ... 
    'Horizontalalignment', 'left', ... 
    'Units','normalized','Position', [0.6 0.9 0.2 0.05]); 
EditBoxHandle3 = uicontrol(f, 'Style', 'Edit','Tag','edit3', ... 
    'Units','normalized','Position', [0.7 0.9 0.2 0.05], 'Callback',@edit_callback3); 
ButtonHandle3 = uicontrol(f, 'Style', 'PushButton', ... 
    'String', 'Generate', ... 
    'Units','normalized','Position', [0.7 0.85 0.2 0.05], ... 
    'callback', @pushbutton_cb3); 

%% I WANT THE PUSHBUTTON TO RETURN THE DATETIME VECTOR HERE SO I CAN USE IT FURTHER MORE 
waitfor(ButtonHandle3, 'UserData') 

% Do what you want with the data here, I choose to return it and to close the figure; 
returnedVector = ButtonHandle3.UserData; 
delete(f); 


    function pushbutton_cb1(hcbo, eventStruct) 
     uicalendar('Weekend', [1 0 0 0 0 0 1], ... 
      'SelectionType', 1, ... 
      'DestinationUI', EditBoxHandle1); 
    end 
    function pushbutton_cb2(hcbo, eventStruct) 
     uicalendar('Weekend', [1 0 0 0 0 0 1], ... 
      'SelectionType', 1, ... 
      'DestinationUI', EditBoxHandle2); 
    end 
    function edit_callback(hcbo, eventStruct) 
     Date = hcbo.String; 
     hcbo.UserData = Date; 
    end 
    function edit_callback2(hcbo, eventStruct) 
     Date = hcbo.String; 
     hcbo.UserData = Date 
    end 
    function edit_callback3(hcbo, eventStruct) 
     Interval = hcbo.String; 
     hcbo.UserData = Interval 
    end 


    function pushbutton_cb3(hcbo, eventStruct) 
     date1 = findobj('Tag','edit1'); 
     date2 = findobj('Tag','edit2'); 
     interval = findobj('Tag','edit3'); 
     data1 = date1.UserData; 
     data2 = date2.UserData; 
     int_str = interval.UserData; 
     interv = str2num(int_str); 
     interval_cal = 1/(1440/interv); 
     datevector = datetime(data1,'Format','dd-MMM-yyyy HH:mm:ss'):interval_cal:datetime(data2); 
     % I set the returned data in UserData in order to finish the waitfor 
     hcbo.UserData = datevector; 
    end 

end 
相关问题