Matlab 删除以前创建的句柄
我正在尝试删除我创建的句柄Matlab 删除以前创建的句柄,matlab,user-interface,handle,Matlab,User Interface,Handle,我正在尝试删除我创建的句柄handles.roi1 我已尝试使用函数delete: delete(handles.roi1) 但它给了我一个错误: Argument must contain a string. 我的目的是删除句柄,就像我从未创建过它一样 你有什么建议或建议我怎么做 也许我没有正确地表达 我正在做一个GUI,我在一个按钮handles.roi1中定义,但我想在另一个按钮上删除它。这是因为,在该按钮上,我执行以下操作: try a=handles.roi1; catch
handles.roi1
我已尝试使用函数delete
:
delete(handles.roi1)
但它给了我一个错误:
Argument must contain a string.
我的目的是删除句柄,就像我从未创建过它一样
你有什么建议或建议我怎么做
也许我没有正确地表达 我正在做一个GUI,我在一个按钮
handles.roi1
中定义,但我想在另一个按钮上删除它。这是因为,在该按钮上,我执行以下操作:
try a=handles.roi1;
catch
b=11;
我想让它进入
捕捉
。我试着做handles=rmfield(handles,'roi1')代码>但不起作用。编辑:重写答案以匹配OP添加的信息
如果使用imread
创建handles.roi1
:
handles.roi1 = imread('test.jpg');
handles = rmfield(handles, 'roi1');
或者,先将内容存储在变量a
中,然后将a
复制到handles.roi1
(在这种情况下,您有两个相同数据的副本):
然后有没有打开的文件句柄。此外,a
和句柄.roi1
是相等的,它们不是文件句柄,但它们都包含图形文件test.jpg
的彩色或灰度图像(在本例中)
在MATLAB中,通常使用fopen
获取文件句柄,但有几个文件I/O命令不使用文件句柄,例如imread
,xlsread
和fastaread
不使用文件句柄
在这种情况下,您希望(我假设)去掉结构句柄的roi1
(handles.roi1
,在MATLAB语法中),因此您可以这样使用rmfield
:
handles = rmfield(handles, 'roi1');
它将句柄
的新副本(不带roi1
字段)存储回名为句柄
的同一结构
请注意,这与文件句柄或图形对象句柄无关。它只是一个名为handles
的结构,您或某人的名称与handles
名称混淆,尽管imread
根本不返回任何文件句柄(或图形对象句柄)!我宁愿将它命名为imageData
,而不是handles
,因为这才是它真正包含的内容
另一方面,如果handles.roi1
实际上是使用fopen
创建的文件句柄,如下所示:
handles.roi1 = fopen('test.jpg');
fclose(handles.roi1);
在这种情况下,您将在MATLAB中拥有一个真正的打开文件句柄,您应该首先使用fclose
关闭该文件,如下所示:
handles.roi1 = fopen('test.jpg');
fclose(handles.roi1);
或者,如果您想关闭使用fopen
打开的所有打开的文件:
fclose('all');
然后,在fclose
之后,如果您想去掉结构句柄的roi1
(handles.roi1
,在MATLAB语法中),您可以这样使用rmfield
(与imread
的情况相同):
它将句柄
的新副本存储到名为句柄的同一结构中,而不带字段roi1
,如果您只想删除句柄的一部分,可以执行上述操作:
rmfield(handles, 'roi1');
如果要删除整个句柄,可以执行以下操作:
clear handles
你说的“删除一个句柄就像我从来没有创建过它一样”到底是什么意思?你能提供更多关于你的问题的细节吗?如何准确地创建句柄.roi1
?是否可能重载了删除
函数?你能在matlab的提示符中输入哪个删除,看看它指向哪里吗?handles.roi1是一个图像矩阵,像a=imread('friends.jpg'),我做了handles.roi1=a。但是,我想删除句柄。1。我该怎么做?你能编辑一下你的问题来扩展和澄清它吗?定义按钮的代码对于回答您的问题非常有用;h=直接;roi2=创建掩码(h);roi=roi1+roi2句柄。roi1=roi捕获h=imellipse;roi1=创建掩码(h);这个问题很难解释。我的问题是我想删除handles.roi1以强制代码再次进入catch代码>rmfield(句柄,'roi1')
不会改变任何东西,因为rmfield
不是一个运算符,它是一个函数(至少在R2012a中是这样),并且没有破坏性<代码>rmfield(句柄“roi1”)
只返回结构句柄
,不返回字段roi1
。如果要清除字段roi1
,则需要将rmfield
的输出存储回句柄(或其他地方)。