Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

WARZ

[Resolvido] Erro para limpar PictureBox vb.net

Recommended Posts

Eu abro as  imagens de uma pasta e for visualizando, se eu tentar deletar uma das imagens da pasta diz que o arquivo esta em uso já tentei algumas opções mas o erro continua..

Alguma ideia de como faço isso?

 

Imports System.IO
Public Class Form1
    Dim Imagens() As String
    Dim contador As Integer = 0
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        If PictureBox1.Image Is Nothing Then
            MsgBox("Sem imagens para visualizar")
        Else
            contador += 1
            If Imagens.Length = contador Then
                contador = 0
            End If
            PictureBox1.Image = Image.FromFile(Imagens(contador))
        End If
    End Sub
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Imagens = Directory.GetFiles("D:\WARZ\Documents\IMAGENS", "*.jpg")
        PictureBox1.Image = Image.FromFile(Imagens(0))
    End Sub
    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        If PictureBox1.Image Is Nothing Then
            MsgBox("Sem imagens para visualizar")
        Else
            If contador = 0 Then
                contador = Imagens.Length
            End If
            contador -= 1
            PictureBox1.Image = Image.FromFile(Imagens(contador))
        End If
    End Sub
End Class

ERRO.jpg

Compartilhar este post


Link para o post
Compartilhar em outros sites

A imagem está aberta no seu programa.

Fecha o programa que você consegue excluir a imagem..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu quero fazer o fechamento das imagens ou seja limpar a picturebox de forma que eu possa excluir as imagens sem precisar fechar o programa.

 

tentei usar PictureBox1.Image = Nothing

PictureBox.Dispose 

 

Mas não consigo, alguém tem a solução pra isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu quero fazer o fechamento das imagens ou seja limpar a picturebox de forma que eu possa excluir as imagens sem precisar fechar o programa.

 

tentei usar PictureBox1.Image = Nothing

PictureBox.Dispose 

 

Mas não consigo, alguém tem a solução pra isso?

 

Tentei agora mesmo as rotinas que passou mas ainda continua o mesmo erro..

Me passaram a dica de :

O método  Image.FromFile  retorna um tipo Image (ou Bitmap, não to lembrado exatamente agora)

Você deve jogar o retorno dele pra uma variável.
Só então, você jogará o valor para o PictureBox.
Depois de usar, a imagem, você dá um Dispose nessa variável. Dar o Dispose no PictureBox não faz muito sentido nesse contexto.

Mas não sei como fazer isso, desculpe sou novato tanto em vb.net quando no fórum então desculpe por algum erro aqui, grato

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quando uma imagem é carregada na PictureBox o arquivo é "bloqueado". Crie um FileStream e controle a acessibilidade com ele.

Algo como isso:

Dim fileStream As System.IO.FileStream
  
fileStream = New System.IO.FileStream("coffee.png", IO.FileMode.Open, IO.FileAccess.Read)
  
PictureBox1.Image = System.Drawing.Image.FromStream(fileStream)
  
// feche a stream para liberar o lock
fileStream.Close()

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pela ajuda pessoal já consegui me passaram a solução..

O problema não estava só com a picturebox e sim com o contador também pois ele ficava sempre somando..

eu fiz direto na picturebox quando devia ter criado variável para isso e não parar diretamente a picturebox e sim a variável..

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por igadino
      Bom dia pessoal, convertir essa função do C# para vba ele funciona perfeitamento no excel e access
      porem estou tentendo usar ela no vb.net  editor VISUAL STUDIO 2013, aparece o erro conforme a imagem enexo, alguem consegue corrigir esse erro;
      Function crc_ccitt_ffff(strParam As String) As String
              Const CRC_POLY_CCITT As Long = &H1021&
              Const CRC_START_CCITT_FFFF As Long = &HFFFF&
              Dim crc As Long, b() As Byte, c As Long, i As Long, j As Long
              Dim crc_tabccitt(0 To 255) As Long
              For i = 0 To 255
                  crc = 0
                  c = i * 256
                  For j = 0 To 7
                      If (crc Xor c) And 32768 Then
                          crc = (crc * 2) Xor CRC_POLY_CCITT
                      Else
                          crc = crc * 2
                      End If
                      c = c * 2
                  Next j
                  crc_tabccitt(i) = crc
              Next i
                  b = strParam
              crc = CRC_START_CCITT_FFFF
              For i = 0 To UBound(b) Step 2
                  crc = (crc * 256) Xor crc_tabccitt(((crc \ 256) Xor b(i)) And 255)
                  crc = ((crc \ 65536) * 65536) Xor crc
              Next i
              crc_ccitt_ffff = Hex(crc)
          End Function

    • Por Roberto S. Santos
      Boa noite.
      Alguém pode me ajudar a fazer a conexão pra salvar Id, UserID e o nome da pessoa ?
      Bdados : cadastro
      Tabela : usuario
      Sem senha : root somente.
      Des de já agradeço.
    • Por Roberto S. Santos
      Boa noite amigos programadores.
      Como posso salvar os dados do tracker.dat no MySQL ?
      Dados : textbox1.text
      Estou usando vb.net 
      Queria uma tabela no MySQL usando o Wamp .
      Poderiam me ajudar ?
      Obrigado.
    • Por rl28
      Bom dia,
       
      Estou querendo ler todos arquivos que meu sistema gerou na minha máquina no formato .txt e carregar os mesmos em uma gridview, assim deixando apenas uma tela de consulta dos dados salvos nos arquivos txt, porém, meu código não está conseguindo consultar os arquivos, podem me ajudar?
       
      Obs.: Quando utilizo o nome fixo do arquivo, funciona.
       
      Código abaixo:

       
      Public Class formListaTransacao Private Sub formListaTransacao_Load(sender As Object, e As EventArgs) Handles MyBase.Load Dim dt As New DataTable dt.Columns.Add("Código") dt.Columns.Add("Descrição") dt.Columns.Add("Ação") Dim Arquivo As New System.IO.StreamReader("C:\Users\rl\Desktop\" & Me.Text & ".txt", System.Text.Encoding.Default) While Arquivo.Peek() <> -1 dt.Rows.Add(Arquivo.ReadLine()) End While DataGridView2.DataSource = dt End Sub  
      Tela do gridview:

       
      Informação que consta no txt e que deve carregar no gridview:
       
      Primeiro arquivo

       
      Segundo arquivo:

    • Por eduardohaag
      Olá,
      Mais uma vez aqui estou eu com uma duvida que não estou conseguindo resolver.
      Estou desenvolvendo um ERP para a grafica da minha esposa. Nesse sistema existe um modulo que registra o tempo trabalhado.
      Para fazer isso existe um botão no formulário principal, que quando é clicado salva a hora na variável entrada, e quando clicado novamente ele registra no banco de dados o intervalo entre a entrada e saida.
      Até ai tudo ok. Porém as vezes a pessoa sai e esquece de clicar para registrar a saida.
       
      Então gostaria de fazer com que a cada 5 minutos fosse verificado se teve alteração na posição do ponteiro do mouse, porém permitindo que o usuário possa usar o programa.
       
      Procurando na internet descobri que para isso o melhor seria usar uma thread para fazer essa verificação da posição do mouse em segundo plano já que seria executado a cada 5 minutos e dessa forma travaria a execução do form principal.
       
      O problema está que quando ele detecta que mouse ficou parado por mais de 5 minutos e executa o codigo que salvo o intervalo no banco de dados acontece esse erro quando chega na linha "btEntrada.Text = "Registrar Entrada"" : "System.InvalidOperationException: 'Operação entre threads inválida: controle 'ToolStrip1' acessado de um thread que não é aquele no qual foi criado.'
       
      Li que tenho que usar algo como invoke e delegate, mas mesmo estudando não consegui entender como implementar.
      meu codigo é o seguinte:
       
      Imports System.ComponentModel Public Class Principal_content Dim saida As DateTime Dim tempo As TimeSpan Dim entrada As DateTime Dim ponteiro As Point Sub GerPonto() Do Threading.Thread.Sleep(5000) If ponteiro = Cursor.Position Then Call registraponto() End If ponteiro = Cursor.Position Loop End Sub Private Sub btEntrada_Click(sender As Object, e As EventArgs) Handles btEntrada.Click Call registraponto End Sub Sub registraponto() Dim trd = New Threading.Thread(AddressOf GerPonto) If btEntrada.Text = "Registrar Entrada" Then entrada = FormatDateTime(Now) btEntrada.Text = "Registrar Saida" btEntrada.ToolTipText = "Registrar Saida" btEntrada.Image = My.Resources.appointment_new_Ativo btEntrada.ForeColor = Color.Lime trd.Start() Else trd.Abort() saida = Now tempo = saida.Subtract(entrada) sql = "INSERT INTO ponto (Data, Entrada, Saida, Segundos) VALUES (#" & Format(entrada, "MM/dd/yyyy") & "#, #" & Format(entrada, "hh:mm:ss") & "#, #" & Format(saida, "hh:mm:ss") & "#, " & Replace(FormatNumber(tempo.TotalSeconds, 0, TriState.False, TriState.False, TriState.False), ",", ".") & ")" btEntrada.Text = "Registrar Entrada" btEntrada.Text = "Registrar Entrada" btEntrada.Image = My.Resources.appointment_new_desativo btEntrada.ForeColor = Color.Red AcessoDB.ExecutarComando(sql, CommandType.Text, Nothing, AcessoDB.TipoDeComando.ExecuteNonQuey) End If End Sub End Class  
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.