我是个新手。我使用下面API函数来对图片进行删除。图片是删除放到了回收站但是为什么在屏幕上的图片却还在呢?点击上一张或是下一张再回来图片又不见了但是此图片的路径和占用的空间还是存在除非重新打开工程。
    如何解决此问题?Private Declare Function SHFileOperation Lib "shell32.dll" Alias _
                "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As Long
Private Type SHFILEOPSTRUCT
        hwnd As Long
        wFunc As Long
        pFrom As String
        pTo As String
        fFlags As Integer
        fAnyOperationsAborted As Boolean
        hNameMappings As Long
        lpszProgressTitle As String
End Type
Private Const FO_DELETE = &H3
Private Const FOF_ALLOWUNDO = &H40
Private Sub fileDelete_Click()
      Dim FileOperation As SHFILEOPSTRUCT
      Dim lReturn As Long
      Dim filepath As String
      filepath = frmForm.Caption
      filepath = filepath & vbNullChar & vbNullChar
      With FileOperation
          .hwnd = Me.hwnd
          .wFunc = FO_DELETE
          .pFrom = filepath
          .pTo = vbNullChar   ' Not used
          .fFlags = FOF_ALLOWUNDO
          .lpszProgressTitle = "文件正在删除"
      End With
      lReturn = SHFileOperation(FileOperation)
      If lReturn = 0 Then
          MsgBox "删除成功!"
      End If
      Picture2.AutoRedraw = True
      Picture2.Cls
      
End Sub

解决方案 »

  1.   

    picbox读图片的时候,把图片存在了内存的一个区域
    如果在picturebox设置的图片地址,那么图片会保存到frx里
      

  2.   

    unload过程中
    set "变量"=noting  //我用ADO释放集录时这么用,不知这里行不行
      

  3.   

    哎呀怎么一个早上了都没人来help me啊?
      

  4.   

    你的图片已读到了内存,和磁盘文件是否存在已没有关系,可用如下语句释放:
    Picture2.Picture = Nothing
      

  5.   

    这个我已经用上了但是“图片是删除不见了但是他还是占用了一定的空间。
      当我点击浏览上一张或是下一张图片再返回的时候图片不存在但是他还是占用了一个空间而且文件名还是在的”这个问题没解决
    ====================================================================
    何以见得“还是占用了一定的空间”?是指硬盘上还有该文件吗?那么你能在资源管理器中打开该文件吗?
    “图片是删除不见了”是指Picture2上的图片不见了吗?难道是说,在硬盘中有这个文件,但只是个0字节的空文件?
      

  6.   

    你上面的代码是删除部分的,你浏览部分的代码是怎么做的?我想大概是你没有刷新变量的缘故,比如说,你有10张图片,你用了一个数组picPicture(9),当你删除了硬盘上的一个图片后,你的picPicture还是10个元素,而不是同步清除了对应的元素,这样当然就引起这种问题出现了。
      

  7.   

    喔是这样啊
    但是我用picture.cls来刷新这样是不是不能成功呢
      

  8.   

    当然不能!
    Cls 方法
          清除运行时 Form 或 PictureBox 所生成的图形和文本。语法object.Clsobject 所在处代表一个对象表达式,其值为“应用于”列表中的一个对象。如果省略 object,则带有焦点的 Form 就被认为是 object。说明Cls 将清除图形和打印语句在运行时所产生的文本和图形,而设计时在 Form 中使用 Picture 属性设置的背景位图和放置的控件不受 Cls 影响。如果激活 Cls 之前 AutoRedraw 属性设置为 False, 调用时该属性设置为 True,则放置在 Form 或 PictureBox 中的图形和文本也不受影响。 这就是说,通过对正在处理的对象的 AutoRedraw 属性进行操作,可以保持 Form 或 PictureBox 中的图形和文本。调用 Cls 之后,object 的 CurrentX 和 CurrentY 属性复位为 0。
    Cls 方法示例
    本示例使用 Cls 方法从一个窗体中删除打印信息。要检验此示例,可将本例代码粘贴到一个窗体的声明部分,然后按 F5 并单击该窗体。Private Sub Form_Click ()
       Dim Msg   ' 声明变量。
       AutoRedraw = -1   ' 打开 AutoRedraw。
       ForeColor = QBColor(15)   ' 将前景设置为白色。
       BackColor = QBColor(1)    ' 将背景设置为蓝色。
       FillStyle = 7   ' 设置对角线菱形。
       Line (0, 0)-(ScaleWidth, ScaleHeight), , B  ' 将框放在窗体上。
       Msg = "This is information printed on the form background."
       CurrentX = ScaleWidth / 2 - TextWidth(Msg) / 2  ' 设置 X 的位置。
       CurrentY = 2 * TextHeight(Msg)   ' 设置 Y 的位置。
       Print Msg   ' 打印信息至窗体。
       Msg = "Choose OK to clear the information and background "
       Msg = Msg & "pattern just displayed on the form."
       MsgBox Msg   ' 显示信息。
       Cls   ' 清除窗体的背景。
    End Sub