我操作上使用它的手柄曲線數據:如何檢查MATLAB句柄是否有效?
x = 1:10; y = sin(x);
h1 = line(x,y);
但是,如果腳本實際終止之前,做這樣的事情會返回一個錯誤的數字被關閉。
>>set(h1,'Color','green') % line is green
??? Error using ==> set
Invalid handle object.
有沒有一種方法,以檢查是否h1
是做任何操作與前一個有效的處理?
我操作上使用它的手柄曲線數據:如何檢查MATLAB句柄是否有效?
x = 1:10; y = sin(x);
h1 = line(x,y);
但是,如果腳本實際終止之前,做這樣的事情會返回一個錯誤的數字被關閉。
>>set(h1,'Color','green') % line is green
??? Error using ==> set
Invalid handle object.
有沒有一種方法,以檢查是否h1
是做任何操作與前一個有效的處理?
可以使用ishandle
功能首先檢查是否圖形處理是有效的:
if ishandle(h1)
set(h1, 'Color', 'green');
end
UPDATE:
對於MATLAB的更新版本,處理的對象是實際的對象,不只是數字值。更好的選擇是使用用於句柄對象isvalid
方法:
if isvalid(h1)
set(h1, 'Color', 'green');
end
如果你知道你要找什麼類型的對象,你可以明確地測試它。如果是手柄(h1) ,則將其替換爲 。 (h1)&& strcmp(get(h1,'type'),'line') – Jonas 2009-12-24 18:52:57
a = 0。 ishandle(a)返回true。但一個不是一個數字,所以:不完整的答案。 – Pedro77 2017-04-04 20:46:33
@ Pedro77:錯誤。如果您正在存儲句柄(如示例中所示),稍後使用'ishandle'檢查它們以確保它們仍然有效,那麼您將永遠不會得到句柄爲0的情況。只有根對象可以爲零;圖形句柄永遠不會。 – gnovice 2017-04-04 20:57:54
注意ishandle具有在於其還接受像0(=桌面手柄)共同數字值和1(一個缺點=第一開口圖默認),這通常也是有效的句柄,儘管可能不是預期的句柄。如果您嘗試設置不存在的屬性,您仍然會看到一個錯誤。
爲了處理這種情況下,只需將一個異常處理塊內的代碼:
try
set(myHandle,propName,propValue);
catch
% do something useful... (recreate the GUI?)
end
try/catch塊是一個很好的解決方案。但是,句柄'0'始終爲根對象保留,繪圖對象或uicontrol始終具有浮點句柄。數字在默認情況下具有整數句柄,但您可以通過創建具有'IntegerHandle'屬性的數字來強制MATLAB使用浮點句柄來處理數字。這將避免創建圖形,存儲整數句柄,然後刪除圖形和使用相同的整數句柄創建的新圖形(因此它實際上是與第一個句柄不同的數字)。 – gnovice 2009-12-24 18:50:38
到檢查的把手,其可用於某些情況下有用的替代方案中,是將'設置(H1,「DeleteFcn ',@delete_fcn_callback)',其中函數delete_fcn_callback(hObj,event)是你定義的東西,當數字被刪除時它會被調用。 – 2013-05-10 11:57:44