Filter löschen
Filter löschen

Contextmenu Callback to set class variable

2 Ansichten (letzte 30 Tage)
Jonas Reber
Jonas Reber am 31 Mai 2011
Hello MatLabers
I am looking for a better/smoother way to implement the setting of a class variable in a callback. I'm sure there is a nicer method than what I'm doing right now.
I have a class property called "displayMode" that has its own set method in the class (function set.displayMode(obj, val)...). On a contextmenu callback I would like to change that value.
% helper function to set the value of displayMode (class property)
function enableView(this, value, varargin)
this.displayMode = value;
end
% different function handles for callback:
en3D = @(h,e)enableView(this,'3D');
en2D = @(h,e)enableView(this,'Frame');
% the contextmenu
this.mycontextmenu = uicontextmenu;
item1 = uimenu(this.mycontextmenu,'Label','...', 'Callback', ...);
item2 = uimenu(this.mycontextmenu,'Label','3D view','Callback',en3D);
item3 = uimenu(this.mycontextmenu,'Label','2D view','Callback',en2D);
..
I'm looking for a possibility that avoids the additional function (here: enableView(...)). I'm thinking of something like:
hSet3D = ['set(this, ''displayMode'', ''3D'')'];
item3 = uimenu(this.mycontextmenu,'Label','better','Callback',hSet3D);
but I can not access the object itself here (this).
Thanks!

Akzeptierte Antwort

Titus Edelhofer
Titus Edelhofer am 31 Mai 2011
Hi,
not really. You could use the setfield function for this purpose:
item3 = uimenu(this.mycontextmenu, 'Label', 'better', ...
'Callback', @(h,e) setfield(this, 'displayMode', 'Frame'));
I leave it up to you to decide, if you would call this better then your solution ;-). If I were you I would add a method setDisplayMode to the class that I would call in the callback...
Titus

Weitere Antworten (0)

Kategorien

Mehr zu Interactive Control and Callbacks finden Sie in Help Center und File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by