none
Confusão com o uso de Recursos RRS feed

  • Pergunta

  • Bom, não sei o que está ocorrendo... vejam só:

     

    Questão 1:

    Meu projeto não tinha nenhuma imagem adicionada como recurso. O arquivo .exe estava pesando 50kb.

    Fui na guia "Resouces"... aquela guia que fica junto com as demais (Application, Compile, Debug, References etc)... pois bem, fui nesta guia "Resources", cliquei em "Add Resource" e adicionei uma imagem ("Pauta.png"). Esta imagem pesa em torno de 500kb.

    Compilei o arquivo novamente, e o .exe passou a pesar em torno de 550kb. Até aqui acho que está correto.

    Daí coloquei este código abaixo, no evento loaded do formulário:

     

     Dim temp As New System.Windows.Controls.Image()
     temp.Source = New BitmapImage(New Uri("Resources\Pauta.png", UriKind.Relative))
    
     Grid1.Children.Add(temp)
    

     

     

    O objetivo é fazer com que o grid1 exiba esta imagem que acabei de adicionar ao projeto.

    Rodei o programa e nada aconteceu.

    Então lendo alguns artigos, vi que as orientações eram de que deve-se ir no "Solution Explorer", clicar no item "Pauta.png", depoir ir em "Properties" e selecionar a opção "Resources" no campo "Build Action".

    Rodei o programa, e tchanan, a imagem estava aparecendo dentro do grid1. Beleza!

    Daí, notei que o arquivo .exe estava pesando 1,1 MB.... ou seja, parece que a imagem "Pauta.PNG" está duplicada dentro do executável.

    O que fiz de errado? e por que não bastou eu apenas adicionar a imagem através do "Add Resource" para ter acesso à imagem? 

     

    Questão 2:

    Após ter feito o procedimento descrito anteriormente, eu tirei a imagem "Pauta.png" do projeto. Para isso eu deletei ela da guia "Resources" e também deletei ela lá na aba "Properties".

    Também deletei o código que postei acima.

    Rodei o programa. A imagem estava aparecendo no grid1.   Como assim??

    Fui verificar o executável: estava pesando ainda 1,1MB. Como assim?? 

    Após várias tentativas, das mais diversas possíveis, descobri que se eu deletar a pasta "obj", e compilar o programa novamente, daí sim é gerado um executável pesando os 50kb iniciais... ou seja, o executável agora não contém mais a imagem que eu havia adicionado. Mas por que tive que deletar a pasta "obj" para que o executável fosse modificado ?

    Só para não haver confusão: o executável a que me refiro desde o começo está dentro da pasta "Bin\Release".

     

     

    Questão 3:

    Eu acrescentei dentro do grid1 um componente WindowsFormHost, e coloquei um DataGridView nele (é que ainda não sei usar muito bem o DataGrid do WPF).

    Dentro do evento paint deste DataGridView eu adicionei código para desenhar algumas imagens em algumas células específicas:

     

    e.Graphics.DrawImage(My.Resources.ClaveC1, ValorLeft, 360, 52, 33)
    

     

    É um datagridview com um número específico de linhas e colunas, não sendo possível adicionar mais linhas ou colunas. As células terão sempre o mesmo tamanho. Então achei que o método acima resolve bem a questão que é desenhar imagens dentro da célula... apesar que devem ter inúmeras outras formas, mas não é isso o que quero tratar agora.

    A dúvida é: por que para desenhar no datagridview é possível usar "My.Resources.NomeDaImagem", e no grid não dá, eu tenho que usar URI (exemplo -->"temp.Source = New BitmapImage(New Uri("Resources\Pauta.png", UriKind.Relative))" )  ???

    É tão mais fácil através do "My.Resources"... inclusive quando se digita o ponto após o "Resources" o sistema já apresenta um droplist com o nome dos recursos disponíveis... tão prático...

     

    Bom, é isso

    Obrigado pela ajuda

     

     

     

     


    sexta-feira, 20 de maio de 2011 00:33

Respostas

  • Questão 1 - não adicione como resources. Crie uma pasta no projeto chamada Imagens e adicione a imagem lá. Coloque o build mode como Content e coloque este código

    Dim temp As New System.Windows.Controls.Image()
    temp.Source = New BitmapImage(New Uri("Imagens\Pauta.png", UriKind.Relative))

    Grid1.Children.Add(temp)

    Questão 2 - Você não deu um build no projeto, então o resource continuava lá.

    Questão 3 - WinForms não é WPF e o gerenciamento de recursos tem algumas peculiaridades.

     

    Bruno


    MVP Client Development - http://msmvps.com/blogs/bsonnino Twitter @bsonnino
    • Marcado como Resposta BladeRunner2019 sexta-feira, 20 de maio de 2011 22:43
    sexta-feira, 20 de maio de 2011 22:16

Todas as Respostas

  • Questão 1 - não adicione como resources. Crie uma pasta no projeto chamada Imagens e adicione a imagem lá. Coloque o build mode como Content e coloque este código

    Dim temp As New System.Windows.Controls.Image()
    temp.Source = New BitmapImage(New Uri("Imagens\Pauta.png", UriKind.Relative))

    Grid1.Children.Add(temp)

    Questão 2 - Você não deu um build no projeto, então o resource continuava lá.

    Questão 3 - WinForms não é WPF e o gerenciamento de recursos tem algumas peculiaridades.

     

    Bruno


    MVP Client Development - http://msmvps.com/blogs/bsonnino Twitter @bsonnino
    • Marcado como Resposta BladeRunner2019 sexta-feira, 20 de maio de 2011 22:43
    sexta-feira, 20 de maio de 2011 22:16
  • Novamente muito obrigado!
    sexta-feira, 20 de maio de 2011 22:43