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

F# Discussion :

Correction Script ( La référence d'objet n'est pas définie à une instance d'un objet.)


Sujet :

F#

  1. #1
    Membre à l'essai
    Homme Profil pro
    Logistitien
    Inscrit en
    Octobre 2013
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Logistitien
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Octobre 2013
    Messages : 30
    Points : 24
    Points
    24
    Par défaut Correction Script ( La référence d'objet n'est pas définie à une instance d'un objet.)
    Bonjour,,

    Je suis intéresser par le language F# avec toutes ces fonctionnalités , je souhaiterais obtenir une correction pour un code simple .
    L' enregistrement provoque une erreur "La référence d'objet n'est pas définie à une instance d'un objet."

    Le code ..
    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    open System
    open System.Drawing
    open System.Windows.Forms
    open System.Threading
     
    type Cell =
     { Alive : bool;} 
     
    type World =
     { Width : int;
       Height : int;
       Cells: Cell[,];}
     
     
     
    let exercise = new Form(MaximizeBox = true, Text = "Exercise", Menu = new MainMenu())
     
    let exercise_Paint(evt : PaintEventArgs) =
        let mutable colorizer : SolidBrush = new SolidBrush(Color.Yellow) 
        let pnBorder : Pen = new Pen(Color.Red)
        evt.Graphics.FillRectangle(colorizer, 20, 20, 248, 162)
        evt.Graphics.DrawRectangle(new Pen(Color.Red), new Rectangle(20, 20, 248, 162))
        evt.Graphics.DrawLine(pnBorder, 20, 20, 205, 20)
     
    let exercisePaint(evt : PaintEventArgs) =
        let mutable colorizer : SolidBrush = new SolidBrush(Color.Lime) 
        let pnBorder : Pen = new Pen(Color.Blue)
        evt.Graphics.FillRectangle(colorizer, 20, 20, 248, 162)
        evt.Graphics.DrawRectangle(new Pen(Color.Red), new Rectangle(20, 20, 248, 162))
        evt.Graphics.DrawLine(pnBorder, 20, 20, 205, 20)
     
    //panel    
    let panel1 = new Panel()
    do panel1.Size <- new System.Drawing.Size(600, 400)
    //do panel1.BackgroundImage <- exercisePaint evt   
    do panel1.BackgroundImageLayout <- ImageLayout.Stretch ||| ImageLayout.Center
    do panel1.Anchor <- System.Windows.Forms.AnchorStyles.Top |||
           System.Windows.Forms.AnchorStyles.Bottom |||
           System.Windows.Forms.AnchorStyles.Left |||
           System.Windows.Forms.AnchorStyles.Right
    do panel1.Location <- new System.Drawing.Point(12, 12)
    do panel1.Name <- "panel1"
    do panel1.TabIndex <- 0
    //do panel1.MouseClick.Add(fun (e:MouseEventArgs)  
     
    // Menu
     
    let fileMenu = exercise.Menu.MenuItems.Add("&File")
    let fileMenu_1 = exercise.Menu.MenuItems.Add("&A propos")
     
    let aProposItem : MenuItem =
          new MenuItem("a propos", (fun _ _ ->
             //let crt = DateTime.Now
             exercise.Close()),
                       Shortcut.CtrlY)
     
    let saveMenuItem : MenuItem =
          new MenuItem("Save", (fun _ _ ->
             let crt = DateTime.Now
             let filename = sprintf "gameofile_%d%02d%02d_%02d%02d%02d%03d.bmp" crt.Year crt.Month crt.Day crt.Hour crt.Minute crt.Second crt.Millisecond
             panel1.BackgroundImage.Save(filename, System.Drawing.Imaging.ImageFormat.Bmp)),
                       Shortcut.CtrlS)
     
    let saveasMenuItem : MenuItem =
          new MenuItem("Save As..", (fun _ _ ->
             let saveFileDialog = new SaveFileDialog()
             saveFileDialog.Filter <- "Bitmap File (*.bmp)|*.bmp|JPeg File (*.jpg)|*.jpg|Gif File (*.gif)|*.gif|Portable Network Graphics (*.png)|*.png"
             saveFileDialog.FilterIndex <- 2
             saveFileDialog.RestoreDirectory <- true
             saveFileDialog.RestoreDirectory <- true
             match saveFileDialog.ShowDialog() with
             | DialogResult.OK ->
                let file = new System.IO.FileInfo(saveFileDialog.FileName)
                printfn "%s" file.Extension
                let format =
                   match file.Extension with
                   | ".jpg" -> System.Drawing.Imaging.ImageFormat.Jpeg
                   | ".gif" -> System.Drawing.Imaging.ImageFormat.Gif
                   | ".png" -> System.Drawing.Imaging.ImageFormat.Png
                   | _ -> System.Drawing.Imaging.ImageFormat.Bmp             
                panel1.BackgroundImage.Save(saveFileDialog.FileName, format)
             | _ -> ()),
                      Shortcut.CtrlShiftS)  
     
    let closeMenuItem : MenuItem =
          new MenuItem("Close", (fun _ _ -> exercise.Close()),
                                  Shortcut.CtrlX)
     
    do fileMenu.MenuItems.Add(saveMenuItem) |> ignore  
    do fileMenu.MenuItems.Add(saveasMenuItem) |> ignore
    do fileMenu.MenuItems.Add("-") |> ignore
    do fileMenu.MenuItems.Add(closeMenuItem) |> ignore
     
    do fileMenu_1.MenuItems.Add(aProposItem) |> ignore
     
    exercise.Paint.Add exercisePaint
    do Application.Run exercise
    Merci de votre aide ...

  2. #2
    Membre chevronné
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Points : 2 209
    Points
    2 209
    Par défaut
    Sans savoir où se situe l'erreur ce n'est pas évident ; surtout que là c'est pas vraiment du fonctionnel mais plutôt du code comme on en fait en C#/VB.Net mais écrit en F# (après l'UI c'est pas forcément le plus adapté au fonctionnel quand on démarre).

    Malgré tout si j'ai bien suivi le code ; le problème se situe ligne 61 de ton extrait de code ; tu tente de sauvegarder l'image de fond de ton panel sauf qu'il n'y a pas d'image de fond (le seul moment où tu aurais pu en mettre c'est ligne 35 qui est commentée (et tant mieux parce que evt n'existerait pas sinon et quand bien même exercisePaint ne renvoie pas de valeur [enfin mais de type unit / donc "void" si tu es habitué à d'autres langages])
    Du coup comme il n'y a pas d'image de fond ; BackgroundImage renvoie null et null.Save ça plante
    Nous sommes tous plus ou moins geek : ce qui est inutile nous est parfaitement indispensable ( © Celira )
    À quelle heure dormez-vous ?
    Censément, quelqu'un de sensé est censé s'exprimer sensément.

Discussions similaires

  1. Réponses: 5
    Dernier message: 28/09/2007, 10h38
  2. Réponses: 2
    Dernier message: 09/09/2007, 14h25
  3. Réponses: 8
    Dernier message: 04/06/2007, 16h20
  4. Réponses: 24
    Dernier message: 01/06/2007, 09h26
  5. Réponses: 8
    Dernier message: 11/07/2006, 17h27

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