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

Windows Forms Discussion :

Error : An object reference is required


Sujet :

Windows Forms

  1. #1
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    204
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 204
    Points : 89
    Points
    89
    Par défaut Error : An object reference is required
    Salut salut

    Alors je comprends pas trop cette erreur, j'ai créé ma classe Film :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        class Film
        {
            private int ID_Film;
            private string Titre;
            private string Duree;
            private int ID_Genre;
            private int ID_Avis;
            private string Affiche;
    Et la procédure Ajout (permettant d'ajouter un film ^^) :

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
            public void Ajout (string T, string D, string G, string A)
            {
                this.ID_Film = this.ID_Film+1;
                this.Titre = T;
                this.Duree = D;
                switch(G)
                {
                    case "Action/Aventure": this.ID_Genre = 1;
                        break;
                    case "Horreur/Suspens": this.ID_Genre = 2;
                        break;
                    case "Tarentino/Rodriguez": this.ID_Genre = 3;
                        break;
                    case "Fantasy/SF": this.ID_Genre = 4;
                        break;
                    case "Psycho": this.ID_Genre = 5;
                        break;
                    case "Thriller": this.ID_Genre = 6;
                        break;
                    case "A la sauce américaine": this.ID_Genre = 7;
                        break;
                    case "Best Of": this.ID_Genre = 8;
                        break;
                    case "Comédie": this.ID_Genre = 9;
                        break;
                    case "Déssin Animé/Animation": this.ID_Genre = 10;
                        break;
                    case "Autre": this.ID_Genre = 11;
                        break;
                    case "Inclassable": this.ID_Genre = 12;
                        break;
                }
                switch(A)
                {
                    case "Excellent": this.ID_Avis = 1;
                        break;
                    case "Bon": this.ID_Avis = 2;
                        break;
                    case "Moyen": this.ID_Avis = 3;
                        break;
                    case "Passable": this.ID_Avis = 4;
                        break;
                    case "Moisi": this.ID_Avis = 5;
                        break;
                }
                this.Affiche = "C:\""+"Vidéothèque\""+"Film\""+T+"\""+"Affiche.jepg";
            }
    Avec les case c'est un peu long, car l'utilisateur choisi parmis les les "Genre" et "Avis" proposés dans les items des comboBox, et selon son choix, l'ID du genre et avis est entrée.

    Donc j'ai ma classe, ma fonction, mais lorsque l'on clique sur le boutton : Ajouter, j'apelle la procédure comme celà :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
            private void button1_Click(object sender, EventArgs e)
            {
                Film.Ajout(textBox1.Text, textBox2.Text, comboBox1.Text, comboBox2.Text); 
            }
    Et sa me renvoie comme erreur : Error 1 An object reference is required for the non-static field, method, or property 'WindowsFormsApplication1.Film.Ajout(string, string, string, string)' C:\Vidéothèque\Vidéothèque\Form1.cs 50 13 Vidéothèque


    Voilà, je ne comprends pas... ='(
    Vous l'aurez deviné, je suis un vrai Newbie en C# ^^

  2. #2
    Membre habitué Avatar de Nikoui
    Inscrit en
    Décembre 2007
    Messages
    119
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Décembre 2007
    Messages : 119
    Points : 142
    Points
    142
    Par défaut
    Film c'est une classe.
    Et on appelle pas une méthode sur une classe, mais sur une instance de classe.

    Par exemple :

    Film film = new Film();
    film.MaMethode();
    Working as designed

  3. #3
    Membre habitué Avatar de Nikoui
    Inscrit en
    Décembre 2007
    Messages
    119
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Décembre 2007
    Messages : 119
    Points : 142
    Points
    142
    Par défaut
    De plus la partie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.ID_Film = this.ID_Film+1;
    Va poser problème, car ID_Film est une propriété de ta classe, donc chaque instance de ta classe a sa propre valeur ID_Film. Dans ce cas précis, tu peux par exemple déclarer une variable static a ta classe, l'incrémenter a chaque ajout et affecter la nouvelle valeur à ID_Film pour chaque film ajouté :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    // Variable static : une seule variable partagée par toute les instances de la classe
    private static int filmCount = 0;
     
    // Dans la méthode Ajout :
    filmCount = filmCount + 1;
    this.ID_Film = filmCount;
    Working as designed

  4. #4
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    La méthode Ajout ressemble fort à un constructeur.

    Quelles sont tes bases en C# ?
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  5. #5
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    204
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 204
    Points : 89
    Points
    89
    Par défaut
    Eum et bien des bases...basiques? :p

    J'avou que je connais pas grand chose en C#, j'ai surtout des bases d'Algorithmie Objet en fait.

    Mais j'ai effectué quelques changements :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
        class Film
        {
            private static int NbFilm;
            ...
            ...
     
            public Film (string T, string D, string G, string A)
            {
                NbFilm++;
    Public Film est mon constructeur (c'est bien comme sa non? le Nom de la classe en constructeur par défault?)

    Ensuite sur le OnClick du bouton AJOUTER, j'ai mis cette ligne de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
                Film F1 = new Film(textBox1.Text, textBox2.Text, comboBox1.Text, comboBox2.Text);
    Donc là niquel sa marche, mais me reste un problème : Que le Film F1 aille s'enregistrer dans ma Base de Données, afin qu'au reboot du programme, il n'ai pas disparu ^^

    Si vous pouvez encore m'aider... Je vous en serait fort reconnaissant!

  6. #6
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 277
    Points : 1 521
    Points
    1 521
    Par défaut
    C'est plutôt simple, il suffit de lui demander :

    "Film soit gentil, va t'enregistrer dans la BDD"

    et je suis sûr qu'il va t'obeir si tu es sympa avec lui

    Sinon, tu peux aussi écrire le code qui le fait et obtenir de meilleurs résultats.

    Non mais sans rire alors :

    on va deviner la BDD que tu utilises
    on va deviner la structure de tes tables
    on va deviner le type de chaque colonne

    Moi la seule chose que je devine, c'est que c'est tellement simple d'enregistrer des données dans une BDD en .NET que tu as pas dû trop chercher (mes dons de voyance m'étonnent moi-même parfois).

Discussions similaires

  1. Réponses: 8
    Dernier message: 13/06/2014, 21h56
  2. Réponses: 2
    Dernier message: 26/01/2012, 14h53
  3. Réponses: 2
    Dernier message: 31/01/2008, 11h58
  4. Réponses: 1
    Dernier message: 26/07/2007, 17h29
  5. [C#][debutant]erreur => object reference is required for a no
    Par ChristopheOce dans le forum Windows Forms
    Réponses: 3
    Dernier message: 25/01/2006, 13h47

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