我正在Matlab中构建GUI(我的第一个GUI),我有160个静态文本框,标签名称为"tag_matrix_1, tag_matrix_2等"。我试图建立一个循环,把所有的标签名称在一个向量:
for i = 1:160
tagNames(i) = ['tag_matrix_' num2str(i)];
end
但是我总是得到错误:"在赋值A(I) = B中,B和I的元素个数必须相同。"为什么?我该如何修复它?
我的第二个问题是关于在循环中显示它。是否有可能循环它,这样我就不用花160行来设置静态文本框了?如:for i = 1:160
set(handles."how can I implement tagNames(i) in there",'String',data2d(i,:);
end
不是尝试将标签名称存储在数组中(这将失败,因为它们的大小都不同),而是创建一个结构体,其中字段名是标签名称,值是句柄本身。您可以使用动态字段引用。
for k = 1:160
field = ['tag_matrix_', num2str(k)];
myhandles.(field) = findobj(gcf, 'tag', field);
end
然后在第二个循环中(填充值),您将访问该结构体的字段。
for k = 1:160
set(myhandles.(['tag_matrix_', num2str(k)]), 'String', data2d(k,:));
end
你真的需要这样存储tag_names
吗?实际上,您可以使用findobj
来查找具有给定标记的元素。这将允许您用。
for k = 1:160
set(findobj(gcf, 'tag', ['tag_matrix_', num2str(k)]), 'String', data2d(k,:))
end