Удаление изображения из папки, на которую есть ссылка в графическом окне - PullRequest
0 голосов
/ 23 апреля 2019

извините, я должен переписать этот вопрос, так как я не получил никаких обновлений по тому же вопросу, опубликованному ранее.

Ниже приведен код, в который я вставляю некоторые данные в базу данных Ms Access в visual studio, используя vb. Net.

Когда я вставляю данные, я также просматриваю изображение для этого элемента и сохраняю в папку, которая находится в каталоге проекта для универсального доступа.

Существует сетка просмотра данных, которая отображает данные, которые были вставлены для доступа к данным alog с изображением в графическом окне. Всякий раз, когда изменяется выбор вида сетки данных, он отображает изображение в графическом окне.

У меня возникла проблема, когда я хочу удалить данные вместе с изображением, расположенным в папке проекта, поскольку он показывает ошибку, что «файл, используемый другим процессом, не может быть удален»

Поскольку я ссылался на это изображение в своем графическом окне, его нельзя удалить напрямую. Поэтому здесь я ищу решение, которое может отображать клон изображения в графическом окне вместо реального объекта.

Ниже мой код

Public Class frmMainCetegory
Private Sub frmMainCetegory_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    'TODO: This line of code loads data into the 'PosDatabaseDataSet.tblItemMainCategory' table. You can move, or remove it, as needed.
    Me.TblItemMainCategoryTableAdapter.Fill(Me.PosDatabaseDataSet.tblItemMainCategory)
    Me.CenterToParent()
    Me.btnAddNew.Select()

End Sub

Private Sub btnAddNew_Click(sender As Object, e As EventArgs) Handles btnAddNew.Click
    Try

        Me.TblItemMainCategoryBindingSource.AddNew()
        Me.txtMainCategory.Select()
    Catch ex As Exception
        MsgBox(ex.Message)
    End Try
End Sub

Private Sub btnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click
    Try

        If Me.txtMainCategory.Text = "" Then
            MsgBox("Please Enter Main Category Name!", vbInformation)
            Exit Sub
        End If

        Me.imgMainCategoryImage.Image.Save(Application.StartupPath & "\Images\" & Me.txtMainCategory.Text & ".jpeg", System.Drawing.Imaging.ImageFormat.Jpeg)

        Me.TblItemMainCategoryBindingSource.EndEdit()
        Me.TblItemMainCategoryTableAdapter.Update(Me.PosDatabaseDataSet.tblItemMainCategory)
        Me.TblItemMainCategoryTableAdapter.Fill(Me.PosDatabaseDataSet.tblItemMainCategory)
        Me.btnAddNew.Select()
    Catch ex As Exception
        MsgBox(ex.Message)
    End Try
End Sub

Private Sub btnDelete_Click(sender As Object, e As EventArgs) Handles btnDelete.Click
    Try
        Dim MainCatName As String
        MainCatName = Me.TblItemMainCategoryDataGridView.CurrentRow.Cells("MainCategoryName").Value

        If Me.TblItemMainCategoryDataGridView.Rows.Count - 1 > 0 Then
            'check before delting, if this main category is used in sub category then It can not be deleted.
            Dim I As Integer
            I = frmSubCategories.TblItemSubCategoryTableAdapter.qryCountMainCategoryUnderSubCategory(MainCatName)
            If I > 0 Then
                MsgBox(MainCatName & " is used under Sub Category(s), Please Delete Sub Category(s) First!", vbOK)
                Exit Sub
            End If
        End If

        Me.TblItemMainCategoryBindingSource.RemoveCurrent()
        Me.TblItemMainCategoryTableAdapter.Update(Me.PosDatabaseDataSet.tblItemMainCategory)
        Me.TblItemMainCategoryTableAdapter.Fill(Me.PosDatabaseDataSet.tblItemMainCategory)

        'Delete the Main Category Image if this exists
        If System.IO.File.Exists(Application.StartupPath & "\Images\" & MainCatName & ".JPEG") Then
            System.IO.File.Delete(Application.StartupPath & "\Images\" & MainCatName & ".JPEG")
            MsgBox("Image Deleted Successfull")

        End If

    Catch ex As Exception
        MsgBox(ex.Message)
    End Try
End Sub

Private Sub btnBrowse_Click(sender As Object, e As EventArgs) Handles btnBrowse.Click
    Try

        Me.OpenFileDialog1.Filter = "Bitmaps(*.JPG, *.PNG, *.JPEG, *.BMP, *.TIF, *.GIF, *.TIFF)|"
        Me.OpenFileDialog1.FileName = ""

        If OpenFileDialog1.ShowDialog(Me) = DialogResult.OK Then
            Dim img As String = Me.OpenFileDialog1.FileName
            Me.imgMainCategoryImage.Image = System.Drawing.Bitmap.FromFile(img)
            Me.btnSave.Select()

        Else

        End If


    Catch ex As Exception
        MsgBox(ex.Message)
    End Try
End Sub

Private Sub TblItemMainCategoryDataGridView_SelectionChanged(sender As Object, e As EventArgs) Handles TblItemMainCategoryDataGridView.SelectionChanged
    Try

        Me.imgMainCategoryImage.Image = DirectCast(Image.FromFile(Application.StartupPath & "\Images\" & Me.TblItemMainCategoryDataGridView.CurrentRow.Cells("MainCategoryName").Value & ".JPEG").Clone(), Image)
        ' Me.imgMainCategoryImage.Image = System.Drawing.Bitmap.FromFile(Application.StartupPath & "\Images\" & Me.TblItemMainCategoryDataGridView.CurrentRow.Cells("MainCategoryName").Value & ".JPEG")

    Catch ex As Exception

        Me.imgMainCategoryImage.Image = My.Resources.imgEmpty 'if image path not found then select empty image

    End Try
End Sub

Private Sub btnClose_Click(sender As Object, e As EventArgs) Handles btnClose.Click
    Me.Close()
End Sub

Private Sub Label6_Click(sender As Object, e As EventArgs) Handles Label6.Click
    frmTable.Show()
End Sub

Конечный класс

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...