Comment puis-je vérifier si un MATLAB poignée est-elle valable?
Je manipuler des données sur une parcelle de terrain à l'aide de la poignée:
x = 1:10; y = sin(x);
h1 = line(x,y);
Cependant, si la figure se ferme avant que le script met fin à réellement faire quelque chose comme ceci renvoie une erreur.
>>set(h1,'Color','green') % line is green
??? Error using ==> set
Invalid handle object.
Est-il un moyen de vérifier si h1
est un descripteur valide avant de faire les manipulations avec elle?
Une alternative à la vérification d'une poignée, ce qui peut être utile pour certains cas, c'est de
set(h1, 'DeleteFcn', @delete_fcn_callback)
, où function delete_fcn_callback(hObj, event)
est quelque chose que vous définissez, et il sera appelé lorsque la figure est en cours de suppression.
OriginalL'auteur dzhelil | 2009-12-24
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser le
ishandle
fonction à vérifier en premier lieu si un graphique de la poignée est valide:Mise à JOUR:
Pour les nouvelles versions de MATLAB, manipuler des objets sont des objets réels, et pas seulement des valeurs numériques. La meilleure option est d'utiliser le
isvalid
méthode pour manipuler des objets:un=0. ishandle(a) renvoie la valeur true. Mais un n'est pas un chiffre, donc: réponse incomplète.
Incorrect. Si vous stockez des poignées, comme dans l'exemple, et à les vérifier plus tard avec
ishandle
pour s'assurer qu'ils sont toujours valides, alors vous n'obtiendrez jamais une situation où la poignée est de 0. Seule la racine de l'objet peut être égal à zéro; les graphiques, les poignées de ne jamais l'être.Ce que j'utilise est: "si isgraphics(figHandle,'figure') && ishandle(figHandle) "
Si vous avez besoin de vérifier que la poignée est un type spécifique de l'objet graphique poignée et est valide,
isgraphics
est tout ce dont vous avez besoin (il vérifie la validité déjà). Si vous avez uniquement besoin de vérifier la validité, et ne se soucie pas de ce type spécifique de l'objet graphique, il est (ou savent déjà),isvalid
est tout ce dont vous avez besoin.OriginalL'auteur gnovice
Noter que ishandle a un inconvénient en ce qu'elle accepte aussi le commun des valeurs numériques de 0 (=handle de bureau) et 1 (=la première figure par défaut) qui sont souvent également valable poignées bien que peut-être pas le devrait poignée. Vous serez alors encore une erreur si vous tentez de définir une propriété qui n'existe pas.
Pour gérer de tels cas, il suffit de placer votre code à l'intérieur d'une exception-le bloc de gestion:
0
est toujours réservé pour la racine de l'objet et de l'intrigue des objets ou des uicontrols toujours à virgule flottante poignées. Les chiffres ont entier gère par défaut, mais vous pouvez forcer MATLAB pour utiliser une variable poignée de point pour les chiffres par la création de la figure avec la propriété 'IntegerHandle` set 'off'. Cela permettra d'éviter la situation où un personnage est créé, l'entier de la poignée est stocké, puis la figure est supprimé et un nouveau personnage créé avec le même entier de la poignée (c'est donc en fait une autre figure que la première poignée se réfère).OriginalL'auteur Yair Altman