Bonjour,

J'ai cette erreur classique lorsque je click sur le bouton btnFitToScreen: "Object reference not set to an instance of an object." (NullReferenceException was unhandled)
Et toujours le meme conseil: "Use the 'New' keyword to create an object instance."

Je crois que je comprends le probleme, mais je ne sais pas comment le resoudre. Dans ma classe cdtPosterBase, l'Image est vide ("Nothing"), donc evidemment la propriete "m_OriginalImage.Width" n'a rien. Je pense qu'il y a peut-etre un probleme de declaration de variable ou purement un probleme de POO.

Bref, si quelqu'un peut me dire ou se trouve le probleme, je serais ravi.

J'ai simplifie le code de facon a pointer sur le probleme rencontre.

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
 
Public Class Form1
    Private cdtPB As cdtPosterBase
 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        ' Create a PictureBox (pbDemo) as cdtPosterBase
        Dim pbDemo As New PictureBox
        pbDemo.Image = My.Resources.Serge
        Me.SplitContainer.Panel2.Controls.Add(pbDemo)
        ' Assign pbDemo to the class cdtPictureBox 
        cdtPB = New cdtPosterBase(pbDemo)
    End Sub
 
    Private Sub btnFitToScreen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnFitToScreen.Click
        cdtPB.FitToScreen()
    End Sub
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
 
Imports System.Drawing.Imaging
 
Public Class cdtPosterBase
    Inherits PictureBox
 
    Public Shadows Property Image() As System.Drawing.Image
        Get
            Return m_OriginalImage
        End Get
        Set(ByVal Value As System.Drawing.Image)
            Dim r As New Rectangle(0, 0, Value.Width, Value.Height)
            m_OriginalImage = New Bitmap(Value)
            m_OriginalImage = DirectCast(m_OriginalImage.Clone(r, Imaging.PixelFormat.Format32bppPArgb), Bitmap)
            Me.Invalidate()
        End Set
    End Property
 
    Public Sub FitToScreen()
        Me.Origin = New Point(0, 0)
        ZoomFactor = Math.Min(ClientSize.Width / m_OriginalImage.Width, ClientSize.Height / m_OriginalImage.Height) ' MESSAGE D'ERREUR !
    End Sub
Autre point important ou pas, ce probleme est aussi arrive depuis que j'ai voulu ajoute un ContextMenu dans la "Public Sub New" (voir ci-dessous).

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
 
    Public WithEvents pbBase As PictureBox
    Private oCtxMenu As New ContextMenuStrip
    Private oToolStripItem1 As New ToolStripMenuItem
    Private oToolStripItem2 As New ToolStripMenuItem
 
    Public Sub New(ByVal cPictureBox As PictureBox)
        pbBase = cPictureBox
        oToolStripItem1.Text = "Info"
        AddHandler oToolStripItem1.Click, AddressOf ContextMenuHandler1_Click
        oCtxMenu.Items.Add(oToolStripItem1)
        ' IN SHORT=> oCtxMenu.Items.Add("Info", New System.EventHandler(AddressOf Me.ContextMenuHandler1_Click))
        oToolStripItem2.Text = "Delete"
        AddHandler oToolStripItem2.Click, AddressOf ContextMenuHandler2_Click
        oCtxMenu.Items.Add(oToolStripItem2)
        pbBase.ContextMenuStrip = oCtxMenu
    End Sub
Bref, je dois faire quelquechose de travers (probleme de comprehension en POO?).

Merci,
JLuc01