How to make uifigure appear on top of Simulink window?

Hi,
I'm developing a toolbox for Simulink, which also has some UI - i.e. I'm creating an uifigure for a preferences dialog, triggered from the Toolstrip.
In later versions of MATLAB, the hierarchy of windows for MATLAB and Simulink seems to be changed, and since all uifigures belong to MATLAB, and not to Simulink, created figures appear behind Simulink.
In previous versions of MATLAB I've used
figure(myFigure)
to ensure that the dialog is shown on the top, but this doesn't help anymore (better to say, it works on Mac, doesn't work on Windows).
I found a workaround, but it is rather strange and is not reflected in any documentation: if I open a uiprogressdlg with parent set to the myFigure, then the figure will be brought to the front too. So, I just open a uiprogressdlg and delete it immediately to ensure that myFigure is shown to the user.
Is there any better solution, which doesn't require such workaround?
Thank you!

 채택된 답변

Abhas
Abhas 2025년 6월 10일
편집: Abhas 2025년 6월 10일
Hi @Nick,
There are cleaner, more supported alternatives to ensure your "uifigure" stays on top of Simulink on Windows:
  • MATLAB now supports ensuring your uifigure remains above all other windows by setting its "WindowStyle" property:
fig = uifigure;
% Ensure the figure floats above everything, including Simulink
fig.WindowStyle = 'alwaysontop';
  • If "alwaysontop" creates conflicts, a solid workaround is toggling visibility. This leverages the "Visible" property to force the OS to re-layer your window. Call this after creating your dialog either manually or right after "uifigure()" and it reliably brings the figure forward on Windows.
function bringToFront(fig)
drawnow;
fig.Visible = 'off';
fig.Visible = 'on';
end
I hope this resolves your query.

댓글 수: 3

Thanks, @Abhas for your support!
Your response is very valuable, as it brings my attention to several points.
Yeah, 'alwaysontop' does produce some conflicts, e.g. uialerts appear behind those figures and it also changes behavior of other applications running (non-MATLAB apps will be behind those windows - which could be inconvenient for the end-users, as some of my figures have long life-cycle on the screen).
So, let me check the second variant!
Actually, I'm using visibility of the figures - e.g. when I open the figure, I remember/restore its position from the previous session. Therefore to prevent the figure visually "jumping" on the screen, I'm hiding it during the creation, and showing it at the end with setting 'Visibility=on'. Though I didn't use 'drawnow' before setting the parameters.
Since all the details seem to be relevant, let me put here more exact excerpt from the code, of how do I handle the figures:
% showing some progress indication, that a dialog is opening (uifigure
% creation can take time, and when it happens in invisible form, user can
% get confusion)
wb = waitbar(0, message, 'Name', title); % appears on top on all platforms.
% I'm using waitbar instead of the uiprogressdlg, as when the parent is invisible, the uiprogressdlg will be invisible too
% create the figure with Visible off
obj.mainFigure = uifigure('Name', obj.tag, 'Visible', 'off', 'Tag', obj.tag, 'CloseRequestFcn', @obj.closeDialogFcn, 'KeyPressFcn', @obj.keyPressedFcn);
...
% set the position, while still hidden
obj.mainFigure.Position = getpref('RqDialogPositions', preftag);
...
set(obj.mainFigure, 'Visible', 'on'); % Here figure appears in the background of Simulink on Windows
delete(wb); % closing the progress indicator
let me try to play with the 'drawnow' and accept your response ASAP (I'm developing on Mac, and need to start my Windows environment to compare :-))
Thanks, once again, @Abhas!
The "bringToFront" function, as you described, seems to solve my case!
Glad it helped!

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 Develop Apps Programmatically에 대해 자세히 알아보기

제품

릴리스

R2025a

질문:

2025년 6월 9일

댓글:

2025년 6월 10일

Community Treasure Hunt

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

Start Hunting!

Translated by