Cannot close figure using CloseFunctionRequest

14 views (last 30 days)
Hello,
I have created a gui using figure and a collection of uicontrols but I now find that I can't close the figure once I'm done with it. I can press the cross in the top right corner and the code runs satisfactorily but the figure won't disappear. Close(gcf) won't work but delete(gcf) will. The code was borrowed from the answer to this post: Answer, but here's my code stripped out to leave only the bits that I think are relevant:
function UserInput_short(S)
hfig = figure('CloseRequestFcn',@close_req_fun);
uiwait(hfig)
function close_req_fun(~,~)
uiresume
end
end
If I run the above I get a blank figure which I can't close using the cross at top right. What am I doing wrong?
Thanks.

Accepted Answer

Adam Danz
Adam Danz on 18 Jun 2025
The CloseRequestFcn defines what to do when someone tries to close the figure. If you override the CloseRequestFcn then instead of simply closing, the code you wrote will run.
Option 1 is to include the delete command in the callback.
function close_req_fun(fig,~)
% [ define your custom behaviors ]
delete(fig)
end
Option 2 is to include a close button in your app that can be used to close the figure instead of the [x] menu button.
Option 3 is to remove the closeRequestFcn definition completely if you want the default closure behavior.
The reason the uiresume is in included in that answer is becuase the dialog also contains a uiwait so the [x] menu button can be used to resume execution and then delete the figure.
  1 Comment
Adam Danz
Adam Danz on 18 Jun 2025
From the Answer you mentioned
  1. The figure waits here indefinitely
  2. By pressing [x] execution resumes
  3. The figure is deleted

Sign in to comment.

More Answers (0)

Categories

Find more on Migrate GUIDE Apps in Help Center and File Exchange

Tags

Products


Release

R2020a

Community Treasure Hunt

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

Start Hunting!