首页 > 解决方案 > 如何从 MDI Child 中保存图像

问题描述

我想从 MDI Child 保存图像,但出现此错误: 在此处输入图像描述

这是代码

Private Sub mnuFileSep_Click(sender As Object, e As EventArgs) Handles mnuFileSep.Click
    Dim saveFile As SaveFileDialog = New SaveFileDialog
    saveFile.Title = "Save Files"
    saveFile.InitialDirectory = "C:\"
    saveFile.Filter = "Jpg File|*.jpg"

    If saveFile.ShowDialog() = DialogResult.OK Then
        'An error appears from the line below
        Form2.PictureBox1.Image.Save(saveFile.FileName, System.Drawing.Imaging.ImageFormat.Jpeg)
    End If
End Sub

标签: vb.net

解决方案


最可能的错误来源是使用Form2. 这会尝试访问 Form2 的“默认实例”,而您可能已经使用“new”关键字显示了不同的实例。

获取对 Form2 实际实例的引用的一种方法:

Private Sub mnuFileSep_Click(sender As Object, e As EventArgs) Handles mnuFileSep.Click
    Dim f2 As Form2 = Me.MdiChildren.OfType(Of Form2).FirstOrDefault
    If Not IsNothing(f2) Then
        Dim saveFile As New SaveFileDialog
        saveFile.Title = "Save Files"
        saveFile.InitialDirectory = "C:\"
        saveFile.Filter = "Jpg File|*.jpg"
        If saveFile.ShowDialog() = DialogResult.OK Then
            f2.PictureBox1.Image.Save(saveFile.FileName, System.Drawing.Imaging.ImageFormat.Jpeg)
        End If
    End If
End Sub

如果您打开了多个 Form2 实例,那么您可以检查活动的 MdiChild 是否属于 Form2 类型,并使用它来代替:

Private Sub mnuFileSep_Click(sender As Object, e As EventArgs) Handles mnuFileSep.Click
    If Not IsNothing(Me.ActiveMdiChild) AndAlso TypeOf(Me.ActiveMdiChild) Is Form2 Then
        Dim f2 As Form2 = DirectCast(Me.ActiveMdiChild, Form2)
        Dim saveFile As New SaveFileDialog
        saveFile.Title = "Save Files"
        saveFile.InitialDirectory = "C:\"
        saveFile.Filter = "Jpg File|*.jpg"
        If saveFile.ShowDialog() = DialogResult.OK Then
            f2.PictureBox1.Image.Save(saveFile.FileName, System.Drawing.Imaging.ImageFormat.Jpeg)
        End If
    End If
End Sub

推荐阅读