2017-01-09 8 views
0

とコールバック関数を呼び出すときにのみベクトルを生成するこれまでMATLABユーザーインターフェイスで日付時間ベクトルを作成したいが、編集ボックスとボタンがすべて作成されていて、うまく動作していますが、コールバック関数が

1)pushbutton_cb3関数は、日付の入力を押した場合にのみ編集ボーンからのデータ文字列を取得しますが、これをどのように削除できますか? 2)私は機能waitforはかなり良い見て、目的球のpushbutton_cb3がどこかに私がコードに言及した値を返すようにしたいが、私は ヘルプは非常に

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

Iドンを理解されるであろう、ここでそれを使用する方法を知りません私の例では、フィールドに日付を手動で入力することを検討しましょう(私はuicalendarと同じ文字列を必ず入力してください)。

uiwaitの代わりにwaitforを使用できます。このようにして、アプリケーションは例外変数が変更された場合にのみ処理を継続します(私の例では、データを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