2011-07-22 43 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有一個很好的文檔詳細解釋了所有這些。稍後我會通過相關頁面的鏈接更新答案。