Como cargar distintas imágenes desde un listbox en C#

Iniciado por ChelmiR, 22 Julio 2014, 19:53 PM

0 Miembros y 2 Visitantes están viendo este tema.

ChelmiR

Quisiera un poco de ayuda, quisiera saber como cargar una imagen en picturebox cuando selecciono un item en la herramienta listbox algo así http://prntscr.com/41ekjk  gracias por su ayuda! :)

Eleкtro

#1
Buenas.

(La imagen que posteaste no existe)

Lo que te voy a explicar se puede hacer de varias maneras, también te podría servir para algo la propiedad Tag de un Bitmap/Image.

Simplemente puedes instanciar una colección de imágenes por ejemplo usando un Dictionary y asignarle una llave a cada objeto, dándole el mismo nombre que el Item (o el índice si prefieres) seleccionado del ListBox.

Ejemplo, en VB.NET:

Código (vbnet) [Seleccionar]
´Public Class Test

   ' Los items del ListBox.
   Private lbItems As String() =
       {
           "Item1",
           "Item2",
           "Item3"
       }

   ' El primer Bitmap.
   Private bmp1 As New Bitmap(Bitmap.FromFile("C:\Users\Administrador\Desktop\PrtScr capture.jpg", False))

   ' El segundo Nitmap.
   Private bmp2 As New Bitmap(Bitmap.FromFile("C:\Users\Administrador\Desktop\PrtScr capture.jpg", False))

   ' El diccionario de Bitmaps.
   ' A cada objeto le asigno un String igual que los Items del ListBox.
   Private ImageDictionary As New Dictionary(Of String, Bitmap) From
       {
           {"Item1", bmp1},
           {"Item2", bmp2}
       }

   ' El ListBox.
   Private WithEvents lb As New ListBox With
       {
           .DataSource = lbItems,
           .Dock = DockStyle.Bottom
       }

   ' El PictureBox.
   Private pcb As New PictureBox With
       {
           .Dock = DockStyle.Fill,
           .BackgroundImageLayout = ImageLayout.Stretch
       }

   Public Sub New()

       ' This call is required by the designer.
       InitializeComponent()

       ' Añado los controles al Form.
       Me.Controls.AddRange({lb, pcb})

   End Sub

   ' El suscriptor del evento "SelectedIndexChanged" del ListBox.
   Private Sub lb_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) _
   Handles lb.SelectedIndexChanged

       Dim SelectedItem As String = CStr(sender.SelectedItem)

       Select Case Me.ImageDictionary.ContainsKey(SelectedItem)

           Case True
               Me.pcb.BackgroundImage = Me.ImageDictionary(SelectedItem)

           Case Else
               MessageBox.Show("No se encontró ninguna imagen asociada a este Item.")

       End Select

   End Sub

End Class


Traducción al vuelo a C# (no lo he testeado):

Código (csharp) [Seleccionar]

using Microsoft.VisualBasic;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
public class Test
{

// Los items del ListBox.
private string[] lbItems = {
"Item1",
"Item2",
"Item3"

};
// El primer Bitmap.

private Bitmap bmp1 = new Bitmap(Bitmap.FromFile("C:\\Users\\Administrador\\Desktop\\PrtScr capture.jpg", false));
// El segundo Nitmap.

private Bitmap bmp2 = new Bitmap(Bitmap.FromFile("C:\\Users\\Administrador\\Desktop\\PrtScr capture.jpg", false));
// El diccionario de Bitmaps.
// A cada objeto le asigno un String igual que los Items del ListBox.
private Dictionary<string, Bitmap> ImageDictionary = new Dictionary<string, Bitmap> {
{
"Item1",
bmp1
},
{
"Item2",
bmp2
}

};
// El ListBox.
private ListBox withEventsField_lb = new ListBox {
DataSource = lbItems,
Dock = DockStyle.Bottom
};
private ListBox lb {
get { return withEventsField_lb; }
set {
if (withEventsField_lb != null) {
withEventsField_lb.SelectedIndexChanged -= lb_SelectedIndexChanged;
}
withEventsField_lb = value;
if (withEventsField_lb != null) {
withEventsField_lb.SelectedIndexChanged += lb_SelectedIndexChanged;
}
}

}
// El PictureBox.
private PictureBox pcb = new PictureBox {
Dock = DockStyle.Fill,
BackgroundImageLayout = ImageLayout.Stretch

};

public Test()
{
// This call is required by the designer.
InitializeComponent();

// Añado los controles al Form.
this.Controls.AddRange({
lb,
pcb
});

}

// El event-handler del evento "SelectedIndexChanged" del ListBox.

private void lb_SelectedIndexChanged(object sender, EventArgs e)
{
string SelectedItem = Convert.ToString(sender.SelectedItem);

switch (this.ImageDictionary.ContainsKey(SelectedItem)) {

case true:
this.pcb.BackgroundImage = this.ImageDictionary(SelectedItem);

break;
default:
MessageBox.Show("No se encontró ninguna imagen asociada a este Item.");

break;
}

}

}

//=======================================================
//Service provided by Telerik (www.telerik.com)
//Conversion powered by NRefactory.
//Twitter: @telerik
//Facebook: facebook.com/telerik
//=======================================================








ChelmiR

muchas gracias por responder amigo! oye la imagen si sirve solo tienes que selecionar el link copiar y pegar en la barra del navegador http://i.imgur.com/uXSG8Uf.png

bueno lo estaba haciendo en c# pero ahora ando en visual studio 2010 con visual basic jeje pero aun no doy con lo que quiero :(

Eleкtro

Cita de: ChelmiR en 31 Julio 2014, 04:03 AMla imagen si sirve solo tienes que selecionar el link copiar y pegar en la barra del navegador http://i.imgur.com/uXSG8Uf.png

Esa imagen si, pero no es la misma que publicaste en tu primer comentario, como ya dije, aquella url no existe.

Un saludo!