2011-07-22 41 views
2

我在Matlab中学习GUI编程。在matlab中处理结构GUI

我发现手柄结构用于存储所有GUI数据是相当棘手的。我想知道结构究竟如何。我将用一个例子来解释我的问题。

比方说,我们已经创建了edittext1。

我们将handle.edittext1存储。 然后

str = get(hObject,'String'); 
set(handles.edittext1,'String',str); 

这将在handles.edittext1为str​​设置字符串。

我的问题是 令人惊讶的是,在get和set操作中'String'不区分大小写。

And handles.edittext1.String不返回存储的字符串。

因此,句柄不是一个结构数组,并且作为一个跟随的问题,它应该是什么结构的句柄? 同样的问题也可以要求hObject。

不,不是作业或作业。这是我的工作正在进行的项目。我已经使用matlab多年了,但这是我第一次用matlab制作GUI。所以,请把我当成新手。

问候

回答

4

hObject是手柄到发出回调(例如点击时其发起回叫的按钮)的对象。手柄是一个包含图形中所有对象的手柄的结构。每个对象的hObject将会不同,相同的句柄列表将传递给每个回调。在你的例子中,如果这是在edittext1回调中,hObject和handles.edittext1是相同的。

两者都是对象的句柄,而不是结构。所以你不能说handle.edittext1.String。对象的所有属性(如字符串内容)都通过set和get函数来访问。如您所见,属性名称不区分大小写。希望回答你所有的问题。

更新:

我对你的跟进问题的回应是为评论太长了,所以我更新了答案。

我不知道我理解你的问题。如果你想检查一个属性的值,可以使用GET,你在你的问题表明:

str = get(handles.edittext1, 'String'); 

如果你想检查一个属性是否存在或属性是什么,叫不指定参数得到:

get(handles.edittext1) 

这将打印所有属性及其值到控制台。如果您想以编程方式执行此操作,则可以使用

params = get(handles.edittext1); 

将返回其字段为参数的结构。然后,您可以访问参数

str = params.String 

,可以检查一个场

isfield(params, 'String'); // This is case sensitive 
+0

感谢您的回答。我有一个后续问题,正如你所说,它们是对象的句柄,那么如何检查对象的哪些属性已被定义? – newbie

0

AFAIK存在的所有句柄到GUI组件是从handle超继承的类(OOP)对象(hgsetget更确切地说,它本身是handle的子类)。因此hObject存储一个指向对象的指针,而不是对象本身。

handle类及其常见子类公开诸如set/get(它们对属性名执行不区分大小写的部分匹配)的常见功能(接口)。在这种情况下,您需要使用getter/setter方法访问“property”字符串。

handles是GUIDE生成的GUI中使用的变量,为了方便用户传递给回调函数。它是一个简单的结构(不是结构数组),因此每个字段可以存储不同类型的数据。

注意:MATLAB有一个很好的文档详细解释了所有这些。稍后我会通过相关页面的链接更新答案。