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.

Matthew Scharley
fonte

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 é?

Matthew Scharley
fonte
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.

Quinxy von Besiex
fonte
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]).

Chuck Conway
fonte