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

Dotnet Discussion :

Struct et initialisation de champs


Sujet :

Dotnet

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2005
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2005
    Messages : 482
    Par défaut Struct et initialisation de champs
    Salut,
    mon problème n'est pas bloquant mais m'intrigue.
    j'ai décidé, par manie sans doute ^^, de ne plus avoir aucun avertissement lors de la compilation de ma boite à outils; et je suis arrivé sur le cas d'une bête Struct dont voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    private struct NMHDR
            {
                public int hwndFrom;
                public int idFrom;
                public int code;
            }
    et voici les messages :
    Le champ 'Outils_Composants.Controls.Control_ListViewFixe.NMHDR.code' n'est jamais assigné et possédera toujours sa valeur par défaut 0
    Le champ 'Outils_Composants.Controls.Control_ListViewFixe.NMHDR.hwndFrom' n'est jamais assigné et possédera toujours sa valeur par défaut 0
    Le champ 'Outils_Composants.Controls.Control_ListViewFixe.NMHDR.idFrom' n'est jamais assigné et possédera toujours sa valeur par défaut 0
    Je suis donc allé sur le site de Krosoft : https://msdn.microsoft.com/fr-fr/lib...or=-2147217396
    Ce site m'affirme qu'on ne peut pas initialiser de champ au sein de la déclaration d'une struct, ce qui ne m'étonne pas...
    Mais vu que je ne crois que ce que je vois, j'ai tout de même testé, et j'obtiens effectivement une erreur à la compilation.

    Bref, ma question finalement se résume à :
    Suis-je condamné à avoir soit une erreur de compilation, soit un avertissement à la compilation à partir du moment où je me crée une bête struct ?¿

    Merci à celui qui pourra m'éclaircir sur ce point

  2. #2
    Membre Expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Par défaut
    Salut,

    m'est avis que tu l'utilises jamais cette struct, nop ? Si tu veux plus de warning tu la vires ^^

  3. #3
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2005
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2005
    Messages : 482
    Par défaut
    Salut,
    merci pour ta réponse,
    mais si, je l'utilise, je traite des messages système avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
            protected override void WndProc(ref Message m)
            {
                switch (m.Msg)
                {
                    case WM_NOTIFY:
                        NMHDR nmh =(NMHDR)m.GetLParam(typeof(NMHDR));
                        if (nmh.code == HDN_BEGINTRACKA || nmh.code == HDN_BEGINTRACKW || nmh.code == HDN_DIVIDERDBLCLICKW)
                        {
                            m.Result = new IntPtr(-1);
                        }
                        else base.WndProc(ref m);
                        break;
                    default:
                        base.WndProc(ref m);
                        break;
                }
            }
    La struct et la méthode sont dans la même classe. Mais j'avoue que c'est la première fouis que je tombe sur ce cas
    Après, comme je disais, ce n'est pas grave, mais j'aurais bien aimé avoir ma liste d'erreurs vide ^^

  4. #4
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 540
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 540
    Par défaut
    salut

    1-il faut définir NMHDR ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    struct NMHDR
    {
       public IntPtr hwndFrom;
       public IntPtr idFrom;
       public int code;
    }
    parce que NMHDR c'est une structure de code non managé

    http://www.pinvoke.net/default.aspx/...res/NMHDR.html

    2-Pas le temps de vérifier il n'y a pas une classe NET de ListCtrl ou de ListView ?
    Sinon il vaut mieux prendre un DataGrid ou autre.

  5. #5
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2005
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2005
    Messages : 482
    Par défaut
    Merci, je testerais.
    Ce code fait partie d'un control hérité d'un datagridview

  6. #6
    Membre Expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Par défaut
    J'avais déjà vu du C++/CLI mais c'est la première fois que je vois du C#/WIN32.
    Bon, y'a rien de mal à vouloir faire sauter tous les warning, c'est même une bonne chose.
    Sinon un peu comme le dit Mat.M je dirais que c'est une embrouille de code non managé : l'analyseur ne voit pas que GetLParam initialise ta struct. Si tu veux juste faire sauter le warning tu as juste à changer la visibilité de ta struct en public (ou en protected comme le suggère Mat.M). Pour le type IntPtr petite question : ça arrive souvent qu'on se serve d'un adressage sur 64bits ? C'est une vraie question.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 07/04/2007, 20h35
  2. Comment je peux initialiser un champ AutoNumber
    Par aliwassem dans le forum Access
    Réponses: 2
    Dernier message: 19/01/2007, 18h32
  3. Initialiser un champ texte avec une fonction javascript
    Par Agoye dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 20/06/2006, 11h26
  4. Initialiser les champs texte d'un formulaire
    Par ludobado dans le forum Access
    Réponses: 2
    Dernier message: 25/04/2006, 16h01
  5. Réponses: 5
    Dernier message: 17/05/2005, 09h34

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