删除先前创建的句柄

时间:2012-12-26 04:56:02

标签: matlab user-interface clear handle

我正在尝试删除我创建的句柄handles.roi1

我已经尝试使用函数delete

delete(handles.roi1)

但它给了我这个错误:

Argument must contain a string. 

我的目的是删除一个我从未创建它的句柄。

您有什么建议或提示我该怎么办?


也许我没有正确表达......

我正在做一个GUI,我在一个按钮handles.roi1中定义,但后来我想在另一个按钮上删除它。这是因为,在那个按钮上我做了:

try a=handles.roi1;
catch
    b=11;

我希望它转到catch。我试图做handles = rmfield(handles, 'roi1');,但它不起作用。

2 个答案:

答案 0 :(得分:1)

编辑:重写了与OP添加的信息相匹配的答案。

如果使用handles.roi1创建imread

handles.roi1 = imread('test.jpg');

或者,首先将内容存储在变量a中,然后将a复制到handles.roi1(在这种情况下,您有2份相同的数据):

a = imread('test.jpg');
handles.roi1 = a;

然后有没有打开文件句柄。此外,ahandles.roi1 相等,它们是文件句柄,但每个都包含图形的颜色或灰度图像文件test.jpg(在本例中为)。

在MATLAB中,通常使用fopen获取文件句柄,但有几个文件I / O命令使用文件句柄,例如imread,{ {1}}和xlsread不使用文件句柄。

在这种情况下你想要的(我假设)是摆脱结构fastaread的字段roi1(MATLAB语法中的handles),这样你就可以使用{{ 1}}这样:

handles.roi1

rmfield的新副本存储为handles = rmfield(handles, 'roi1'); ,而不将字段handles存储回名为roi1的同一个结构中。

请注意,这与文件句柄或图形对象句柄无关。它只是一个名为handles的结构,你或某人的名字令人困惑,名字为handles,尽管handles根本没有返回任何文件句柄(也没有图形对象句柄)!我宁愿将其命名为imread而不是imageData,因为这就是它真正包含的内容。

另一方面,如果handles确实是使用handles.roi1创建的文件句柄,那么:

fopen

在这种情况下,您将在MATLAB中拥有一个真正的打开文件句柄,您应该首先使用handles.roi1 = fopen('test.jpg'); 关闭该文件,如下所示:

fclose

或者,如果您要关闭使用fclose(handles.roi1); 打开的所有打开文件:

fopen

然后,在fclose('all'); 之后,您想要删除结构fclose(MATLAB语法中的roi1)的字段handles,您可以使用{{ 1}}这种方式(与handles.roi1的情况相同):

rmfield

imread的新副本存储为handles = rmfield(handles, 'roi1'); ,而不将字段handles存储回名为roi1的同一个结构中。

答案 1 :(得分:0)

如果你只想删除句柄的一部分,你可以按照上面提到的那样做:

rmfield(handles, 'roi1');

如果要删除整个句柄,可以执行以下操作:

clear handles