IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Eviter la levée d'une erreur lors d'accès à une propriété qui n'existe pas toujours


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2017
    Messages : 38
    Par défaut Eviter la levée d'une erreur lors d'accès à une propriété qui n'existe pas toujours
    Bonjour,

    Je cherche à connaitre la slide affichée par l'utilisateur dans PowerPoint (en mode édition, pas projeté).
    Pour cela j'utilise un event SlideChange et lorsque cet event se produit je lance int newIndex = Application.ActiveWindow.View.Slide.SlideIndex.

    Le problème c'est que cet event se lance quand une nouvelle slide se crée mais aussi quand on clique sur le panneau de gauche avec les miniatures entre 2 slides. Quand on clique entre 2 slides, cela remonte une exception View (unknown member) : Invalid request. No slide is currently in view. C'est normal que cette exception ait lieu car il n'y a alors pas de vue pointée.
    Ce que je veux faire c'est ignorer le cas où il y a un clic entre 2 slides.

    La seule façon que j'ai trouvée aujourd'hui est de faire un try/catch
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
            private int Application_SlideChange(PowerPoint.SlideRange SlR)
            {
                try
                {
                    return Application.ActiveWindow.View.Slide.SlideIndex;
                }
                catch
                { 
                     return 0;
                }
             }
    Mais ce code n'est pas très satisfaisant et à chaque création de slide j'ai un exception qui passe par catch.

    Ma question:
    Savez comment faire pour éviter de lever l'exception ? Quelque chose du genre if(Application.ActiveWindow..... != ... ){return Application.ActiveWindow.View.Slide.SlideIndex;}.

    J'ai inspecté les propriétés de ActiveWindow et View mais je n'ai pas de propriété qui change dans le cas où je pointe une slide ou non. Les seules différences que j'ai vu ce sont les propriétés MediaControlsHeight, MediaControlsWidth, etc dans View qui passent d'une valeur numérique quand c'est sur une slide à une levée d'exception quand je suis entre 2 slides: {System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.Runtime.InteropServices.COMException: Erreur non spécifiée (Exception from HRESULT: 0x80004005 (E_FAIL))

    Merci

  2. #2
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    3 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 040
    Par défaut
    Y'a pas de secret face à une exception.
    - Soit tu la trappes et renvoie un résultat qui signifie que tu n'as pas trouvé l'information que tu cherches
    - Soit tu fait regarde ce qui déclenche l'exception et tu fais des tests en amont pour ne pas passer dans le code qui la déclenche.

    Je vois deux pistes :
    - La propriété Slide à nulle lorsque tu te trouves entres deux slides
    - SlideChange n'est sans doute pas le bon événement à utiliser

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2017
    Messages : 38
    Par défaut
    Popo,
    Je n'arrive pas à la propriété Slide car Application.ActiveWindow.View lève un execption avant.
    Et parmi les évènements, je n'en vois pas d'autres.

    Mais je continue à chercher !

  4. #4
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 496
    Par défaut
    Bonjour,
    Question bête, est-ce que ça fonctionne ainsi:
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    private int Application_SlideChange(PowerPoint.SlideRange SlR)
            {
                try
                {
                    return Application?.ActiveWindow?.View?.Slide?.SlideIndex ?? 0;
                }
                catch
                { 
                     return 0;
                }
             }

    Tatayo.

  5. #5
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    3 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 040
    Par défaut
    Citation Envoyé par droledenm Voir le message
    Popo,
    Je n'arrive pas à la propriété Slide car Application.ActiveWindow.View lève un execption avant.
    Et parmi les évènements, je n'en vois pas d'autres.

    Mais je continue à chercher !
    Tu as pourtant dit ceci dans ton premier message:
    J'ai inspecté les propriétés de ActiveWindow et View mais je n'ai pas de propriété qui change dans le cas où je pointe une slide ou non
    Si ça plante sur View c'est bien que les propriété changent sinon tu n'aurais pas de problème sur Application.ActiveWindow.View !!!
    Bref, tu as donc View qui vaut null lorsque tu es entre deux slides, il te suffit de vérifier ça et tu n'auras plus d'exception.

    Le code de tatayoyo devrait également fonctionner.

Discussions similaires

  1. [XL-2010] Peut-on éviter une erreur d'éxécution si la valeur recherchée n'existe pas?
    Par gilou41 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 09/02/2015, 18h51
  2. Changer valeur d 'une propriéte qui n'existe pas (DAO)
    Par jazzybluesy dans le forum VBA Access
    Réponses: 2
    Dernier message: 14/10/2012, 19h48
  3. Réponses: 6
    Dernier message: 29/03/2008, 16h36
  4. [ADO.Net][Access] Pourquoi ai-je une erreur lors de l'Update ?
    Par nazimb dans le forum Accès aux données
    Réponses: 1
    Dernier message: 15/05/2006, 10h37
  5. Réponses: 2
    Dernier message: 21/06/2004, 16h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo