How to find parent uifigure for a child several layers down

조회 수: 15 (최근 30일)
Otis
Otis 2022년 9월 23일
댓글: Otis 2022년 9월 23일
I want to call uiconfirm from a uilistbox's ValueChangedFcn. uiconfirm requires a uifigure as its first argument, but the uilistbox is several layers down from the parent uifigure. These layers consist of custom components (built from matlab.ui.componentcontainer.ComponentContainer) and uigridlayouts. Is there a builtin way to find the handle to the parent uifigure? I want to avoid having to pass the figure handle down through each layer. I'm sure that this question has been asked and answered before, but I've been unable to find the solution
Thanks times a million,
Bill

채택된 답변

Steven Lord
Steven Lord 2022년 9월 23일
Use ancestor.
>> f = uifigure;
>> h = uipanel('parent', f);
>> f2 = ancestor(h, 'matlab.ui.Figure');
>> f == f2
ans =
logical
1
  댓글 수: 1
Otis
Otis 2022년 9월 23일
Awesome!! Just what I was looking for. I think I've seen this before, so I don't know why it didn't come up in any of my searches.
Thanks times mutiple millions :)
Bill

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

추가 답변 (1개)

dpb
dpb 2022년 9월 23일
" I want to avoid having to pass the figure handle down through each layer."
In an app, data are all global anyway, so save the uifigure handle on startup/creation and use the saved variable value/handle instead.
  댓글 수: 3
dpb
dpb 2022년 9월 23일
편집: dpb 2022년 9월 23일
The app struct is global, yes...otherwise you wouldn't have access to all its members from any function.
@Steven Lord's solution is better coding practice, though, agreed -- I've never run across ancestor in 30+ years w/ MATLAB, either...as you say, it certainly is not well cross-linked into the documentation to make one aware of it. It isn't in the "See Also" list with findobj although findobj is linked to in ancestor. It is in the "Functions" list for findobj although didn't make the hit parade...
Otis
Otis 2022년 9월 23일
Got it ... Thanks!

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

카테고리

Help CenterFile Exchange에서 Develop uifigure-Based Apps에 대해 자세히 알아보기

제품


릴리스

R2021b

Community Treasure Hunt

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

Start Hunting!

Translated by