2016-08-05 63 views
0

我构建了一个函数“sng_figureslide”,它生成一个滑块,可以滑过已创建的所有图形。我必须点击de滑块才能用箭头键控制它。如何在GUI matlab中创建一个对象?

我想知道是否有可能在我调用该函数时使滑块对象处于活动状态,因此我不必事先单击滑块。

function sng_figureslide 

figh=findobj('type','figure'); 
figs=numel(figh); 

% if there are one or zero figures, the slider does not appear 
if figs > 1 
    sliderstep = 1/(figs-1); 
else 
    return 
end 

fignumber = cell2mat(get(figh,'Number')); 
sliderfignumber = max(fignumber) + 1; 
figure(max(fignumber) +1) 
set(gcf,'position',[360 190 560 36]); 
set(gcf,'Toolbar','none'); 
a=annotation('textbox',[0.03 0.2 0.1 0.7],'String',num2str(figs)); 

uicontrol('Style', 'slider',... 
    'Min',1,'Max',figs,'Value',figs,... 
    'Position', [80 10 470 20],... 
    'Callback', {@slider1,figh,a,figs,fignumber,sliderfignumber},...  
    'SliderStep', [sliderstep sliderstep]); 
end 

function slider1(hObj,~,figh,a,figs,fignumber,sliderfignumber) 
    Val = round(get(hObj,'Value')); 
    set(a,'String',num2str(Val)); 
    figure(figh(Val)); 
    figure(sliderfignumber); 
end 

此外,我觉得这个功能对于很多人来说非常有用,所以请随时使用它。

+0

您可以设置一个WindowKeyPressFcn来捕获箭头键事件并为您更新滑块。 – Suever

回答

1

当您创建uicontrol时,保存它的句柄。然后将该句柄传递回uicontrol函数。

h = uicontrol (....) 
uicontrol (h); 
+0

您的解决方案非常简单直接。 TX!有时候我只是看不到那些简单的。 –