2017-01-09 2 views
0

Ich möchte einen Datum-Zeit-Vektor mit einer MATLAB-Benutzeroberfläche erstellen, bis jetzt habe ich alle Bearbeitungsfelder und Schaltflächen erstellt und sie funktionieren gut, aber es gibt 2 kleine Probleme, denen ich gegenüberstehenGenerieren Sie einen Vektor nur, wenn Callback-Funktion

1) Die Funktion pushbutton_cb3 ruft nur Datumszeichenfolge aus den Bearbeitungsbones nur ab, wenn ich die Eingabetaste an den Daten drücke, wie kann ich dies entfernen? 2) Ich möchte, dass die funtion pushbutton_cb3 den Wert irgendwo kehre ich in den Code erwähnt haben, eine Funktion waitfor ziemlich gut aussehen, aber ich weiß nicht, wie es zu benutzen hier Hilfe wird sehr

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 

Antwort

0

I don geschätzt werden Habe die Financial Toolbox nicht, also betrachten wir in meinem Beispiel, dass ich manuell die Daten in die Felder gebe (ich überprüfe, ob ich die gleiche Zeichenfolge wie uicalendar eingeben soll).

Sie können waitfor anstelle von uiwait verwenden. Auf diese Weise wird die Anwendung nur fortgesetzt, wenn die freigestellte Variable geändert wurde (In meinem Beispiel habe ich die Daten in 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 
Verwandte Themen