Cómo crear y usar recursos en .NET

192

¿Cómo creo un recurso que pueda consultar y usar en varias partes de mi programa fácilmente?

Mi problema específico es que tengo un NotifyIcon del que quiero cambiar el ícono dependiendo del estado del programa. Un problema común, pero con el que he estado luchando durante mucho tiempo.

Matthew Scharley
fuente

Respuestas:

325

Bueno, después de buscar y juntar varios puntos de StackOverflow (caramba, ya me encanta este lugar), la mayoría de los problemas ya habían pasado esta etapa. Sin embargo, logré encontrar una respuesta a mi problema.

Cómo crear un recurso:

En mi caso, quiero crear un icono. Es un proceso similar, sin importar qué tipo de datos desee agregar como recurso.

  • Haga clic derecho en el proyecto al que desea agregar un recurso. Haga esto en el Explorador de soluciones. Seleccione la opción "Propiedades" de la lista.
  • Haga clic en la pestaña "Recursos".
  • El primer botón en la parte superior de la barra le permitirá seleccionar el tipo de recurso que desea agregar. Debería comenzar en cadena. Queremos agregar un icono, así que haga clic en él y seleccione "Iconos" de la lista de opciones.
  • A continuación, vaya al segundo botón, "Agregar recurso". Puede agregar un nuevo recurso o, si ya tiene un icono, también puede agregarlo. Siga las indicaciones de la opción que elija.
  • En este punto, puede hacer doble clic en el recurso recién agregado para editarlo. Tenga en cuenta que los recursos también se muestran en el Explorador de soluciones, y hacer doble clic allí es igual de efectivo.

Cómo usar un recurso:

Genial, entonces tenemos nuestro nuevo recurso y estamos ansiosos por tener esos encantadores íconos cambiantes ... ¿Cómo hacemos eso? Bueno, por suerte, C # hace que esto sea extremadamente fácil.

Hay una clase estática llamada Properties.Resourcesque le da acceso a todos sus recursos, por lo que mi código terminó siendo tan simple como:

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

¡Hecho! ¡Terminado! Todo es simple cuando sabes cómo, ¿no?

Matthew Scharley
fuente
gracias por esto, estaba buscando exactamente lo mismo. ¿hay alguna manera de incrustar los archivos .ico en el ejecutable para que no se muestren como archivos separados? Espero que mi pregunta tenga sentido. saludos,
Amc_rtty
1
@Andrei: Eso es exactamente lo que es un recurso. Una vez que se agrega, se integrará como parte del exe compilado.
Matthew Scharley
1
"... la mayoría de los problemas ya habían pasado esta etapa" - Demasiado cierto ... ¡Gracias por armar esto! Sabía que era simple ... al final.
roadsunknown
1
Como nota al margen, los archivos de recursos se bloquean en tiempo de compilación. Por lo tanto, cambiarlos dinámicamente en tiempo de ejecución hace poco para cambiar los valores existentes. Use archivos de configuración, si desea cambiar los valores en tiempo de ejecución. En caso de que esto ayude a alguien.
Purusartha
1
En VB.NET, se accede a los recursos a través de, por ejemplo, "My.Resources.GreenIcon"
andy
9

Lo anterior en realidad no funcionó para mí como esperaba con Visual Studio 2010. No me permitió acceder a Properties.Resources, dijo que era inaccesible debido a problemas de permisos. Finalmente tuve que cambiar la configuración de Persistencia en las propiedades del recurso y luego descubrí cómo acceder a él a través del archivo Resources.Designer.cs, donde tenía un captador automático que me permitía acceder al icono, a través de MyNamespace.Properties.Resources .NameFromAddingTheResource. Eso devuelve un objeto de tipo Icon, listo para usar.

Quinxy von Besiex
fuente
7

El método anterior funciona bien.

Otro método (supongo que la web aquí) es crear su página. Agregar controles a la página. Luego, en modo de diseño, vaya a: Herramientas> Generar recurso local . Aparecerá automáticamente un archivo de recursos en la solución con todos los controles en la página asignada en el archivo de recursos.

Para crear recursos para otros idiomas, agregue el idioma de 4 caracteres al final del nombre del archivo, antes de la extensión ( Account.aspx.en-US.resx, Account.aspx.es-ES.resx ... etc.).

Para recuperar las entradas específicas en el código subyacente, sólo tiene que llamar a este método: GetLocalResourceObject([resource entry key/name]).

Chuck Conway
fuente