Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2009
    Messaggi
    34

    [VB 2008] NullReferenceException oggetto graphics

    All'interno di un Private Sub Button3_Click(...) voglio creare un grafico che innanzitutto mi deve creare degli assi e successivamente stampare un grafico.

    All'interno ho definito:

    Dim superficie As Graphics
    Dim blackPen As New Pen(Color.Black, 3)

    poi...

    superficie.DrawLine(blackPen, 0, 0, 10, 0)



    Mi da subito un warning: variable 'superficie' is used before it has been assigned a value. A null reference exception could result at runtime

    Poi a runtime mi da una NullReferenceException per "Object reference not set to an instance of an object"

    Ho capito che superficie è un reference a non un istanza di un oggetto. Ma come faccio a creare un'istanza dell'oggetto Graphics?





    Object reference not set to an instance of an object.

  2. #2
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,539
    ciao,

    lo potresti ottenere ad esempio da un picturebox o da form facendo "l'override" del metodo OnPaint.

    se guardi qualche post piu' in basso trovi un esempio

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2009
    Messaggi
    34
    potresti essere per favore un pò più chiaro,magari con un piccolo esempio? Non sono molto ferrato...

  4. #4
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,539
    Originariamente inviato da dulby82
    potresti essere per favore un pò più chiaro,magari con un piccolo esempio? Non sono molto ferrato...

    l'ho già fatto

    comunque :

    codice:
    ///faccio un override del metodo OnPaint
    protected override void OnPaint(PaintEventArgs e)
            {
                ///PaintEventArgs e contiene il tipo graphics che viene passato dal sistema 
                ///quando viene ridisegnata la superfice e lo puoi utilizzare direttamente qui 
                ///dentro oppure memorizzarlo in un campo o ancora passarlo ad un metodo 
                ///che lo elabora, l'importante è poi restituirlo alla base che lo visualizzera nel tuo 
                ///schermo
                base.OnPaint(e);
            }
    cosa non ti è chiaro?

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2009
    Messaggi
    34
    Ho provato a ricopiare esattamente il codice riportato nel link e mi da sempre il problema di Object reference not set to an instance of an object. Perchèèèèèèèèèèèèèèèè?????


    http://msdn.microsoft.com/it-it/libr...rol.paint.aspx

  6. #6
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,539
    posta il nuovo codice

  7. #7
    Ciao
    m'intrometto!

    Secondo me dipende molto da cosa desideri dal tuo grafico!

    se vuoi una cosa dinamica che continui ad aggiornarsi secondo tempi, flussi di dati in arrivo o cose del genere è consigliabile disegnare su un controllo (picture box o form) così ogni volta che il controllo viene disegnato ridisegna tutto.

    se invece i dati non sono così tanto dinamici come ad esempio una datagrid è meglio disegnare su un'immagine e poi inserire essa all'interno di una picturebox, così l'applicazione sarà più veloce.

    Nel primo caso il disegno lo devi creare all'interno dell'evento paint del controllo e l'oggetto graphics ti viene passato come parametro da esso
    codice:
    Private Sub PictureBox1_Paint(ByVal sender As Object, _
            ByVal e As System.Windows.Forms.PaintEventArgs) _
            Handles PictureBox1.Paint
            
        Dim superficie As Graphics = e.Graphics
        Dim blackPen As New Pen(Color.Black, 3)
    
        ...
    
    End Sub
    Nel secondo caso devi prima impostare un'immagine con le dimensioni che desideri, e poi su di esso impostare l'oggetto graphics

    codice:
    Dim tela As New Bitmap(220, 150)
    Dim superficie As Graphics = Graphics.FromImage(tela)
    Dim blackPen As New Pen(Color.Black, 3)
    ...

  8. #8
    Utente di HTML.it
    Registrato dal
    Aug 2009
    Messaggi
    34
    Posto il codice così come vorrei implementarlo, striminzito all'osso per ora!
    Ma non mi stampa neanche la linea...!



    Imports System.IO
    Imports Microsoft.VisualBasic
    Imports System.Drawing

    Public Class Form1




    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click



    Dim superficie As Graphics = Me.CreateGraphics
    superficie.DrawLine(Pens.Black, 0, 0, 10, 0)



    End Sub

    End class

  9. #9
    Utente di HTML.it
    Registrato dal
    Aug 2009
    Messaggi
    34
    Vendaval non avevo letto la tua risposta, ora do un'okkiata e vedo se risolvo, grazie comunque a tutt'e 2

  10. #10
    ma...
    Me.CreateGraphics che cos'è?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.