1

我有一些看起来像这样的句柄:

ans = 

                    figure1: 189.0205
             sampleNameEdit: 17.0216
             selectCatPopup: 16.0237
             radiobutton_Al: 14.0266
              radiobutton_O: 190.0183
                     output: 189.0205

如何轻松查找以 开头的句柄radiobutton__?将来,我将有更多我想轻松检索的单选按钮。

4

3 回答 3

3

要在句柄名称中搜索特定模式,最好的方法是遵循Luis Mendo 在他的回答中的建议。但是,请考虑根据您要查找的对象类型进行搜索。在这种情况下,似乎radiobutton需要定位所有对象。

查找特定样式的句柄的最直接方法uicontrol是搜索其Style属性设置为 的句柄radiobutton。考虑一个figure有两个控件的:一个文本框和一个单选按钮,它们的句柄存储在一个普通的数组中uih

hf = figure; % parent of uicontrols
uih(1) = uicontrol('style','text');
uih(2) = uicontrol('style','radiobutton');

这是我的测试句柄值(你的会有所不同):

>> uih
uih =
    3.0012    4.0012

第一个是文本框,第二个是单选按钮。

按父句柄搜索

如果您有父句柄(即图形句柄hf),您甚至不需要句柄列表uih!只需findobj按以下方式调用:

hr = findobj(hf,'style','radiobutton')
hr =
    4.0012

搜索句柄数组

如果您没有父句柄,但有要搜索的句柄列表,那也没问题:

hr = findobj(uih,'style','radiobutton')
hr =
    4.0012

搜索struct手柄

在您的情况下,您将句柄存储为 a 中的字段struct

handles = 
    ht: 3.0012
    hr: 4.0012
hr = findobj(structfun(@(x)x,handles),'style','radiobutton')
hr =
    4.0012

别担心,这会找到所有单选按钮!

于 2014-02-07T16:41:18.890 回答
2

假设您有一个结构,每个句柄都存储在不同的字段中:

s.radiobutton_1 = 1; %// example data: struct with several fields
s.otherfield    = 22;
s.radiobutton_2 = 333;

names = fieldnames(s); %// get all field names
ind = strmatch('radiobutton_',names); %// logical index to matching fields
selected = cellfun(@(name) s.(name), names(ind)); %// contents of those fields

返回所需的结果:

selected =

     1
   333
于 2014-02-07T14:40:30.060 回答
1

目前还不清楚你ans从哪里得到它,它的结构是什么,以及究竟应该“从”“radiobutton_”开始。但是,如果您想获取所有现有单选按钮的句柄,findobj则可以这样做:

h = findobj(findobj('Type', 'uicontrol'), 'Style', 'radiobutton');

您可以使用以下方式将搜索限制为当前图形的子级

h = findobj(findobj(gcf, 'Type', 'uicontrol'), 'Style', 'radiobutton');

并且您可以oh使用

h = findobj(findobj(oh, 'flat', 'Type', 'uicontrol'), 'Style', 'radiobutton');
于 2014-02-07T16:28:44.430 回答