Partage
  • Partager sur Facebook
  • Partager sur Twitter

Vérifier l'existence d'un objet graphique c#

WinForm

Sujet résolu
    14 octobre 2020 à 11:45:09

    Bonjour,

    Je développe une application WinForm avec différents écrans que j'affiche dans le même panel de mon EcrMain.

    Mon Premier écran affiche un TreeView d'objet.

    Mon objet Métier contient un attribut TreeNode contenant la référence au TreeNode du Treeview.

    Quand je change d'écran et que j'essaye de valider mon objet il essaye de mettre à jour le label du TreeNode mais celui si n'est pas null il n'existe juste plus donc j'aimerais savoir si il y a un moyen de tester si l'objet TreeNode existe encore car pour le moment j'utilise un try catch pour gérer l'erreur mais cela prend du temp même si le try catch est vide 

    -
    Edité par boabi 14 octobre 2020 à 11:45:47

    • Partager sur Facebook
    • Partager sur Twitter
      14 octobre 2020 à 12:04:44

      Vos objets métiers n'ont pas à avoir d'objet de 'IHM.

      C'est la couche IHM qui est cliente de la couche métier et pas l'inverse.

      Si vous utilisez correctement le Data Binding, vous fournissez votre objet métier (ou un DTO correspondant, si vous voulez bien isoler les couches) à votre couche graphique et c'est cette couche graphique qui se démerdera pour construire les éléments d'interfaces nécessaire à l'affichage de l'objet métier/DTO.

      C'est donc, pour moi, un problème qui n'a pas lieu d'être car le problème est bien en amont : votre architecture.

      • Partager sur Facebook
      • Partager sur Twitter
      Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
        14 octobre 2020 à 13:41:16

        Merci de votre réponse très rapide,

        Je suis d'accord avec ce que vous avez dis mais mon architecture m'est imposer dans mon projet et donc je réitère ma question :

        Est-il possible de vérifier l'existence d'un objet ? Et si oui comment

        -
        Edité par boabi 14 octobre 2020 à 13:45:41

        • Partager sur Facebook
        • Partager sur Twitter
          14 octobre 2020 à 14:20:19

          >mon architecture m'est imposer

          Là, je pense que vous vous plantez.

          Que le client/donneur d'ordre se soit mal exprimé ou que vous ayez mal compris comment corriger l'architecture est bien plus probable.

          Je pense que vous vous arc-boutez sur votre conception mais il faut juste faire quelques correctifs en amont, VOTRE architecture.

          Comprenez le bien, votre TreeNode existe et existera tant que le moindre objet a une référence sur lui, donc votre objet "métier".

          Vous vous mangez une exception, non pas parce qu'il "n'existe pas", mais parce qu'il utilise des références vers d'autres objets (exactement comme votre objet "métier"), stockées dans ses champs, mais que ces objets ( qui existe et existeront toujours, indirectement, via votre objet "métier", oui j'insiste, c'est votre objet "métier" qui joue les nécromanciens), en tout cas en Winform, utilisent des objets non-managés par .NET : les "objets" GDI. Et ces "objets" GDI, eux, ils s'en cognent du garbage-collector .NET et que vous travaillez comme un cochon : une fois que vous avez fermé une boite de dialogue GDI (une Form dans WinForm), lui, il fait vraiment le ménage, chez lui, et il fait pas dans le faire-part de décès.

          Donc, oui, le framework WinForm a été conçu pour qu'on utilise correctement des architectures en couche et qu'on utilise correctement aussi IDisposable.

          Si vous nous écoutez pas, vous allez ramer contre la conception générale du Framework Winform, et .NET en général.

          Donc, on réitère notre réponse, votre question n'a pas de sens parce que vous programmez n'importe comment.

          Soit vous enlevez votre TreeNode de l'objet métier et vous repassez cet objet métier "tout propre" d'un formulaire à un autre, charge au formulaire de créer les TreeView et les TreeNode qui vont bien.

          Soit ce n'est pas un objet métier et donc il n'y a pas de sens à vouloir le faire passer d'un formulaire à autre (à moins d'un formulaire satellite à un autre).

          Le coup de bambou est tellement rapide avec ce genre de connerie que vous êtes le premier à vouloir le faire et l'architecture existante (avant vous) n'a certainement pas fait ce genre de bêtise.

          • Partager sur Facebook
          • Partager sur Twitter
          Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
            14 octobre 2020 à 14:27:16

            tout simplement if (TreeNode is null) (ou is not null; ou  encore == null)
            • Partager sur Facebook
            • Partager sur Twitter
              14 octobre 2020 à 15:08:46

              >bacelar

              Merci pour votre réponse détailler j'ai grâce à vous mieux pus comprendre l'erreur. Mais même si ma situation est archaïque j'aurais besoin d'une solution.

              >umfred

              Merci pour votre réponse mais le problème est que mon objet TreeView n'est pas détecter comme null donc if(TreeNode is null) me retourne false car l'objet TreeNode n'existe plus 

              Oublions mon Architecture pour ma question.

              Est-ce-que il est possible de vérifier si un objet existe, Alors que si il n'existe pas il n'est pas détecter null ?

              • Partager sur Facebook
              • Partager sur Twitter
                14 octobre 2020 à 15:51:37

                regarder si sa propriété isDisposed passe à vrai (pour le TreeView) sinon les TreeNodes font parties de la collection Nodes de TreeView, regarder le nombre de Node de celle-ci ?(treeview.nodes.count)
                • Partager sur Facebook
                • Partager sur Twitter
                  14 octobre 2020 à 16:36:10

                  Merci Beaucoup umfred grâce à vous j'ai résolut mon problème.

                  Je me concentrais trop sur le TreeNode qui ne possédais pas de IsDisposed mais le TreeView si.

                  Encore Merci.

                  • Partager sur Facebook
                  • Partager sur Twitter
                    14 octobre 2020 à 17:30:20

                    Bon, mon second prénom, c'est Cassandre.

                    Franchement, en enlevant ce TreeNode des champs de votre objet métier, ça sera beaucoup plus safe.

                    • Partager sur Facebook
                    • Partager sur Twitter
                    Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.

                    Vérifier l'existence d'un objet graphique c#

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown