Cargar Imagen en botones mediante codigo en C# (Windows Form)

Iniciado por elg.system.32, 9 Abril 2015, 21:14 PM

0 Miembros y 1 Visitante están viendo este tema.

elg.system.32

Hola a todos.

Me gustaria realizar un juego Mental o juego de pares o juego de la memoria.

Para esto practico tratando de resolver mi primer problema que es Cargar Imagen en botones mediante codigo. asi que empece a realizar esta solucion o proyecto.









Agregué una carpeta denominado "imagenes" dentro la solucion o proyecto.


En dicha carpeta "imagenes" tengo varias imagenes (Imagen_001, Imagen_002, Imagen_003, Imagen_004, Imagen_005 y Imagen_006).


De momento cuando ejecuto el programa me sale asi:


Ahora necesito cargar una imagen desde esta carpeta "imagenes" al boton [Btn_Carga] para asi mostrarse la imagen en el boton.

Tambien indicar que la ruta de las imagenes deben de ser relativas y no absulotas. cosa que cuando ejecute este proyecto en otro computador no me genere problemas o error de ruta.

Espero puedan ayudarme para que pueda continuar en esta etapa de crear el juego mencionado anteriormente.

Gracias y saludos.


:laugh: :laugh: :laugh: :laugh: :laugh: :laugh: :laugh: :laugh: :laugh: :laugh: :laugh: :laugh: :laugh: :laugh: :laugh: :laugh: :laugh: :laugh: :laugh: :laugh: :laugh:
Lo que no te mata, te hace mas fuerte

ivancea96

Algo como:
Código (csharp) [Seleccionar]
button.BackgroundImage = Image.FromFile(@"imagenes/img.jpg");

DarK_FirefoX

Dos formas, una como dice ivancea96:

Código (csharp) [Seleccionar]
button.BackgroundImage = Image.FromFile(@"rutaImagen.jpg");

Otra:

Código (csharp) [Seleccionar]

FileStream file = new FileStream("rutaImagen.jpg", FileMode.Open);
Image toLoad = Image.FromStream(file);
button.Image = toLoad;


Mod: Clase FileStream dentro de System.IO;

Salu2s

elg.system.32

Primero agradecer por las respuestas y lo intentare de ambas formas luego indico como me va.

Gracias.



;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-)
Lo que no te mata, te hace mas fuerte

elg.system.32

#4
Hola de nuevo.

coloque este código en el evento load del formulario segun me indicaron:

Segun ivancea96:


Código (csharp) [Seleccionar]

private void Frm_CargarImagenEnBoton_001_Load(object sender, EventArgs e)
{
 Btn_Carga.BackgroundImage = Image.FromFile(@"imagenes/Imagen_001.png");
}


Segun DarK_FirefoX:

Código (csharp) [Seleccionar]

using System.IO;

private void Frm_CargarImagenEnBoton_001_Load(object sender, EventArgs e)
{
 FileStream file = new FileStream(@"imagenes/Imagen_001.png", FileMode.Open);
 Image toLoad = Image.FromStream(file);
 Btn_Carga.Image = toLoad;
}


pero no carga ninguna imagen en el boton, como tampoco me marca ningun tipo de error.

No estoy seguro si utilice mal las sugerencias o necesito hacer algo mas, espero sus observaciones.

Saludos.


:-( :-( :-( :-( :-( :-( :-( :-( :-( :-( :-( :-( :-( :-( :-( :-( :-( :-( :-( :-( :-( :-( :-( :-(
Lo que no te mata, te hace mas fuerte

Eleкtro

Buenas

1. Aunque puedes cargar imágenes locales, es bastante feo e improductivo, deberías utilizar la infraestructura Settings para añadir tus recursos de imágenes a la tabla de recursos administrada.
En las propiedades del proyecto puedes administrar los recursos.

2. En la imagen que has mostrado estás colocando la carpeta "imagenes" en el directorio de la solución, no en el directorio de compilación, que sería ...\Bin\Debug y ...\Bin\Release dependiendo del modo de compilación.

PD: Formula futuras dudas sobre C# en la sección correcta de programación dedicada a la plataforma .Net

Saludos








DarK_FirefoX

Como bien dice Eleкtro, estás utilizando una ruta relativa, por lo tanto la carpeta imágenes debe estar dentro ...\Bin\Debug y/o ...\Bin\Release dependiendo del modo de compilación. En otro caso puedes probar a usar una ruta absoluta

También hay que ver cuál es el objetivo de cargar las imágenes, si quieres que el usuario añada la imagen que quiera o tienes algunas predefinidas, en el segundo caso, deberías hacer uso de, como dice Eleкtro, la infraestructura Settings para manejar los recursos de imágenes.

Salu2s

elg.system.32

Cita de: DarK_FirefoX en  9 Abril 2015, 22:34 PM
Como bien dice Eleкtro, estás utilizando una ruta relativa, por lo tanto la carpeta imágenes debe estar dentro ...\Bin\Debug y/o ...\Bin\Release dependiendo del modo de compilación. En otro caso puedes probar a usar una ruta absoluta

También hay que ver cuál es el objetivo de cargar las imágenes, si quieres que el usuario añada la imagen que quiera o tienes algunas predefinidas, en el segundo caso, deberías hacer uso de, como dice Eleкtro, la infraestructura Settings para manejar los recursos de imágenes.

Salu2s

Que tal DarK_FirefoX.

Es necesario hacer esto que indicas de colocar la carpeta "imagenes" dentro de ...\Bin\Debug y/o ...\Bin\Release.


Esto se debe hacer por que es lo mas correcto o solo por la facilidad de trabajar. espero no cansar con estas preguntas, solo que quisiera hacer de manera correcta.

Agregue esta carpeta "imagenes" mediante el editor o Programa visual Estudio



y este la agrego en esta parte de la solucion o programa:


por esta razon esperaba cargar las imagenes de esta carpeta.

Saludos
Lo que no te mata, te hace mas fuerte

Eleкtro

#8
Cita de: elg.system.32 en  9 Abril 2015, 23:05 PMAgregue esta carpeta "imagenes" mediante el editor o Programa visual Estudio[/size]

Eso solo sirve para manejar la estructura del proyecto, separa de tu mente lo que es el proyecto con la forma en la que trabaja el ensamblado que compilas.

Si tu archivo 'compilado.exe', es decir si tú código fuente, va a cargar imagenes locales entonces no necesitas añadir esas imagenes al proyecto.

Cita de: elg.system.32 en  9 Abril 2015, 23:05 PMEs necesario hacer esto que indicas de colocar la carpeta "imagenes" dentro de ...\Bin\Debug y/o ...\Bin\Release.[/size]

Esto se debe hacer por que es lo mas correcto o solo por la facilidad de trabajar. espero no cansar con estas preguntas, solo que quisiera hacer de manera correcta.

vamos a ver, para que lo entiendas mejor:

La carpeta "imagenes" se encuentra aquí:
Directorio raíz del proyecto

El proyecto que compilas se encuentra aquí:
Directorio raíz del proyecto\Bin\Debug

Cómo ves, el directorio de las imagenes lo pusiste 2 niveles superiores al directorio de compilación, así que si usases una ruta relativa tendrías que subir dos niveles del directorio de trabajo actual para acceder al directorio "imagenes":
Código (csharp) [Seleccionar]
Image.FromFile(@"./../../imagenes/imagen_001.png");

Obviamente NO quieres eso, por que no tiene sentido distribuir una aplicación de esa manera.

Por ende, debes coloca la carpeta "imagenes" en el mismo directorio donde se encuentra el executable que has compilado (programa.exe).

Saludos








elg.system.32

#9
Cita de: Eleкtro en  9 Abril 2015, 23:21 PM

Por ende, debes coloca la carpeta "imagenes" en el mismo directorio donde se encuentra el executable que tu proyecto ha compilado.

Saludos

Ya puse la carpeta "imagenes" en ...\Bin\Debug y me funciona con cualquiera de estos codigos:

Segun ivancea96:


Código (csharp) [Seleccionar]
private void Frm_CargarImagenEnBoton_001_Load(object sender, EventArgs e)
{
 Btn_Carga.BackgroundImage = Image.FromFile(@"imagenes/pares/Imagen_001.png");
}


Segun DarK_FirefoX:

Código (csharp) [Seleccionar]
using System.IO;


private void Frm_CargarImagenEnBoton_001_Load(object sender, EventArgs e)
{
 FileStream file = new FileStream(@"imagenes/pares/Imagen_001.png", FileMode.Open);
 Image toLoad = Image.FromStream(file);
 Btn_Carga.Image = toLoad;
}



Aqui esta el proyecto: https://www.dropbox.com/s/y6kss7wy2vhrr9r/C_Sharp_2013%28Forms%29-CargarImagenEnBoton_001.rar?dl=0

Ahora mi consulta es ¿Cual es la diferencia entre estos dos formas y en que caso se usa uno u otro?

Gracias


;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-)
Lo que no te mata, te hace mas fuerte