Изменения в поведении коллбэка ResizeFcn
отражают изменения в расположении и размещении фигур и контейнеров, чтобы сделать их поведение более сопоставимым друг с другом и через все платформы.
Начиная в R2014b, коллбэк ResizeFcn
может выполниться, прежде чем все переменные в программном файле присвоены. Когда это происходит, коллбэк ResizeFcn
возвращает ошибку.
Например, эта программа имеет коллбэк ResizeFcn
, который использует переменную, возвращенную функцией createGUI
.
function mygui hs = createGUI; function handles = createGUI % Create figure and its children f = figure('Tag','fig',... 'ResizeFcn',@doResizeFcn,... 'Visible','off'); u = uicontrol('Parent',f,'Tag','ctrl'); handles = guihandles(f); % make figure visible set(f,'Visible','on'); end function doResizeFcn(varargin) length(hs) end end
hs
не существует, когда коллбэк doResizeFcn
выполняется впервые (когда фигура становится видимой).mygui
Undefined function or variable "hs". Error in mygui/doResizeFcn (line 18) length(hs) Error using mygui/createGUI (line 14) Error while evaluating Figure SizeChangedFcn
Чтобы исправить проблему, сделайте фигуру видимой после всех переменных, что ссылки коллбэка присвоены. В этом случае сделайте фигуру видимой после вызывания функции createGUI
.
function mygui hs = createGUI; % Make the figure visible set(hs.fig, 'Visible','on'); function handles = createGUI % Create figure and its children f = figure('Tag','fig',... 'ResizeFcn',@doResizeFcn,... 'Visible','off'); u = uicontrol('Parent',f,'Tag','ctrl'); handles = guihandles(f); end function doResizeFcn(varargin) length(hs) end end
Начиная в R2014b, изменяя размер невидимого контейнера, такого как фигура, панель, группа кнопок, не инициировала коллбэк ResizeFcn
, пока контейнер не становится видимым.
В предыдущих релизах MATLAB® выполняется коллбэк ResizeFcn
, когда размер контейнерных изменений, независимо от того, видимо ли это.
Можно управлять видимостью фигур и контейнеров с помощью свойства Visible
:
Фигура видима, если его свойство Visible
установлено в 'on'
.
uipanel или uibuttongroup видимы, если его свойство Visible
и тот из его предков, установлены в 'on'
. Например, uibuttongroup, родительский элемент которого является uipanel, видим, когда свойство 'Visible'
uibuttongroup, uipanel, и фигура все установлены в 'on'
.
Запуск в R2014b, изменение внешних границ фигуры или контейнера не инициировали коллбэк ResizeFcn
.
Например, эта фигура, которую коллбэк ResizeFcn
не выполняет в новой графической системе, когда вы изменяете OuterPosition
(путем удаления панели меню) на второй строке этого кода. Однако коллбэк действительно выполняется в предыдущих релизах MATLAB.
f = figure('ResizeFcn','display resized'); set(f,'Menubar','none');
Начиная в R2014b, коллбэк ResizeFcn
выполняется только, когда область векторной и растровой графики контейнера (внутренняя область) изменяется. Предыдущие релизы MATLAB не могут выполнить коллбэк ResizeFcn
, когда область векторной и растровой графики изменяется.
Например, этот uipanel коллбэк ResizeFcn
выполняется в новой графической системе, когда вы изменяете область векторной и растровой графики uipanel путем увеличения ширины рамки. Коллбэк не выполняется когда ваше выполнение этот код в предыдущих релизах.
p = uipanel('ResizeFcn','display resized'); set(p,'BorderWidth',3);