Verfasst am: 05.01.2019, 16:29
Titel: Callbacks innerhalb einer Klassen definieren
Hallo Leute,
ich möchte mittels einer Klasse Steuerelemente für eine GUI erstellen. In diesem einfachen Beispiel einfach 1x Pushbutton (uicontrol) dem ich eine Callback-Funktion zuweise.
Nun für gewöhnlich ruft meine eine Callback-Funktion mit
1. Wieso muss man denn hier nun 'Callback', @(src, evnt) obj.callThisFcn schreiben?
Ist src, evnt als Name eigentlich richtig? - ich habe nur diese Namen gewählt weil diese in der Regel so gewählt werden.
Ist das generell innerhalb von Klassen so oder ist das erst ab einer bestimmten MATLAB Version eingeführt worden?
2. Wieso wird dann in der Funktion selbst mit obj die Klasse mit ihren Eigenschaften ausgegeben? Wie zuvor beschrieben wird doch normalerweise das Objekt das den Callback aufruft an die Funktion übergeben...?
Wie kann ich den handle des pushbuttons an die Funktion zusätzlich übergeben?
3. callThisFcn(obj, ~)
Wenn ich ~ durch evnt ersetze dann erhalte ich aber keine eventdaten, da erhalte ich eine Fehlermeldung. Wieso gibt es hier keine eventdata?
Würde mir ungemein helfen wenn ihr mir zu diesen Fragen eine Hilfestellung geben und Licht ins Dunkel bringen könntet.
function outputArg = callThisFcn(obj, hObject, evntdata)
%obj ... Klasse/Instanz
%hObject ... handle des UI controls (Pushbutton)
%evntdata ... ist auch eine Klasse/Struktur mit ActionItems
... ... end
Aber wie geht das zusammen, ich übergebe der Funktion nur 2 Argumente (src, evnt) und die Funktion selbst übernimmt aber 3 Argumente (obj, hObject, eventdata)? Ich bin verwirrt...
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
zu 1.:
die zweite Syntax nimmt die von außen übergebenen Argumente (bei Callbacks src und event) und ruft damit obj.callThisFcn auf. Dabei wird obj wieder als erstes Argument übergeben und was auch immer von außen kommt als weitere Argumente.
Beides ist äquivalent, du kannst verwenden was du möchtest.
zu 2.:
wenn beim Aufruf explizite Argumente übergeben werden sollen, dann muss man auch Eingabeargumente definieren, also
Das wäre die von mir bevorzugte weil für mich klarste Syntax.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.