Programmatically trigger events for UI objects (AppDesigner) using "notify()"
20 views (last 30 days)
Show older comments
I'm having a hard time ant this almost feels like a bug.
I'm trying to trigger the "ChangedValue" event associated with an object (buy handle) while scanning through a collection (array) of objects, for every time the value of the object is programmatically changed.
Could someone explain why the following pseudo-code is not working?
% Prior code includes the creation of listeners such as changing the value from the GUI triggers the events correctly.
function changeEveryValues(~,collections)
for i=1:length(collection)
collection(i).Value = ADifferentValue(); % Just because the value needs to be changed
EveryPossibleEventNames = events(collection(i)) % This shows clearly the validity of the event name.
AValidEventName = EveryPossibleEventNames{1} % Prints 'ChangedValue'
notify(collection(i),AValidEventName); % TROWS ERROR
end
end
Every time, matlab trows an error such as:
Cannot notify listeners of event 'Name of the Event' in class 'Name of the class'.
This works, but changes nothing, else than giving a handle for the listener, which is useless.
lh = addlistener(collection(i),'ValueChanged',collection(i).ValueChangedFcn);
Need more details? Feel free to ask!
Any insight on how this can be done? I tried calling the callback function from the function handle but without success. Notifying an event was my workaround but is, yet again, a dead end.
0 Comments
Answers (1)
Samay Sagar
on 25 Mar 2024
The given error you are encountering is possibly because the event has been defined with private or protected “NotifyAccess”. Ensure that the event is public to notify the event from within the class itself. Also,ensure that each object in your collection has a listener attached that responds to the “ChangedValue” event.
Here is how you can implement a MATLAB class with custom events:
classdef MyObject < handle
properties
Value
end
events
ChangedValue
end
methods
function obj = MyObject(initialValue)
obj.Value = initialValue;
end
function setValue(obj, newValue)
obj.Value = newValue;
end
end
end
Attaching a sample MLAPP that uses the “notify” function to trigger custom callbacks for your reference.
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!