Como criar e usar recursos no .NET


192

Como crio um recurso que posso referenciar e usar em várias partes do meu programa facilmente?

Meu problema específico é que tenho um NotifyIcon do qual desejo alterar o ícone, dependendo do estado do programa. Um problema comum, mas com o qual estou lutando há muito tempo.

Respostas:


325

Bem, depois de pesquisar e reunir vários pontos em torno do StackOverflow (nossa, eu já amo esse lugar), a maioria dos problemas já havia passado dessa fase. Eu consegui encontrar uma resposta para o meu problema.

Como criar um recurso:

No meu caso, quero criar um ícone. É um processo semelhante, independentemente do tipo de dados que você deseja adicionar como recurso.

  • Clique com o botão direito do mouse no projeto ao qual você deseja adicionar um recurso. Faça isso no Solution Explorer. Selecione a opção "Propriedades" da lista.
  • Clique na guia "Recursos".
  • O primeiro botão na parte superior da barra permitirá selecionar o tipo de recurso que você deseja adicionar. Deve começar na string. Queremos adicionar um ícone, então clique nele e selecione "Ícones" na lista de opções.
  • Em seguida, vá para o segundo botão, "Adicionar recurso". Você pode adicionar um novo recurso ou, se já possui um ícone, também pode adicioná-lo. Siga as instruções para qualquer opção que você escolher.
  • Neste ponto, você pode clicar duas vezes no recurso recém-adicionado para editá-lo. Observe que os recursos também são exibidos no Gerenciador de Soluções e clicar duas vezes nele também é eficaz.

Como usar um recurso:

Ótimo, por isso temos nosso novo recurso e estamos ansiosos por ter aqueles ícones adoráveis ​​em mudança ... Como fazemos isso? Bem, para nossa sorte, o C # torna isso extremamente fácil.

Há uma classe estática chamada Properties.Resourcesque fornece acesso a todos os seus recursos; portanto, meu código acabou sendo tão simples quanto:

paused = !paused;
if (paused)
    notifyIcon.Icon = Properties.Resources.RedIcon;
else
    notifyIcon.Icon = Properties.Resources.GreenIcon;

Feito! Acabado! Tudo é simples quando você sabe, não é?


obrigado por isso, estava procurando exatamente a mesma coisa. existe uma maneira de incorporar os arquivos .ico no executável para que eles não sejam exibidos como arquivos separados? Espero que minha pergunta faça sentido. regards,
Amc_rtty

1
@Andrei: Isso é exatamente o que é um recurso. Uma vez adicionado, ele será incorporado como parte do exe compilado.
Matthew Scharley

1
"... a maioria dos problemas já havia passado desta fase" - É verdade ... Obrigado por juntar isso! Eu sabia que era simples ... no final.
roadsunknown

1
Como uma observação lateral, os arquivos de recursos são bloqueados no momento da compilação. Portanto, alterá-los dinamicamente em tempo de execução faz pouco para alterar os valores existentes. Use arquivos de configuração, se desejar alterar valores em tempo de execução. Caso isso ajude alguém.
Purusartha

1
No VB.NET, os recursos são acessados ​​via, por exemplo, "My.Resources.GreenIcon"
andy

9

O exemplo acima não funcionou para mim como eu esperava no Visual Studio 2010. Ele não me permitiu acessar Properties.Resources, disse que estava inacessível devido a problemas de permissão. Por fim, tive que alterar as configurações de persistência nas propriedades do recurso e descobri como acessá-lo através do arquivo Resources.Designer.cs, onde havia um getter automático que me permitia acessar o ícone via MyNamespace.Properties.Resources .NameFromAddingTheResource. Isso retorna um objeto do tipo Icon, pronto para uso.


7

O método acima funciona bem.

Outro método (suponho que a Web aqui) é criar sua página. Adicione controles à página. Em modo de design, vá para: Ferramentas> Gerar recurso local . Um arquivo de recurso aparecerá automaticamente na solução com todos os controles na página mapeados no arquivo de recurso.

Para criar recursos para outros idiomas, anexe o idioma de 4 caracteres ao final do nome do arquivo, antes da extensão ( Account.aspx.en-US.resx, Account.aspx.es-ES.resx ... etc).

Para recuperar entradas específicas no código-behind, simplesmente chamar esse método: GetLocalResourceObject([resource entry key/name]).

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.