2009-11-21 24 views
5

Tengo conjuntos de imágenes alojadas en la web que necesito que mi usuario pueda seleccionar 1 de cada una. Pensé que un listbox funcionaría para esto, pero no puedo entender agregar una imagen a una. es posible? mejor manera de hacer esto? Estoy usando el último vb gratuito.agregar imágenes a listbox (visual básica)

Respuesta

2

Conjunto ListBox1.DrawMode a DrawMode.OwnerDrawFixed o DrawMode.OwnerDrawVariable, y agregue un controlador para dibujar las imágenes.

Private Sub listBox1_DrawItem(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DrawItemEventArgs) Handles ListBox1.DrawItem 
Dim img As Image 
img = sender.items(e.Index) 
e.Graphics.DrawImage(img, targetsize) 
End Sub 

Puede agregar las imágenes a la colección de elementos listbox.

Dim img As Image 
img = Image.FromFile("c:\tmp.jpg") ' or whatever 
ListBox1.Items.Add(img) 
... 
9

Uso del Listview control su lugar, proporciona una mejor funcionalidad, y no sufre de un fallo de cambio de tamaño molesto. El listbox se transfiere de VB6 días. La vista de lista admite encabezados de columna, agrupaciones y un poco más.

Agregue un control Imagelist a su formulario, para almacenar las imágenes; establece su propiedad ColorDepth en 32 bits y establece la propiedad LargeImagelist de Listview en el control de lista de imágenes que acaba de agregar (esto también se puede hacer en código).

Añadir imágenes a ImageList a través de este código:

ImageList1.Images.Add("imagekey", Image.FromStream(yourimagestream)) 

añadir elementos a la vista de lista a través de este código:

ListView1.Items.Add("list item title", "imagekey") 

El "ImageKey" es una forma de decirle al Listview qué imagen utilizar. También puede usar índices para los iconos, pero al especificar un índice que no existe obtendrá una excepción de índice fuera de rango, mientras que una clave que no existe, simplemente no usará ninguna imagen.

Oh también desea establecer la propiedad Listview selección múltiple en False (si sólo quiere que seleccionar uno a la vez), y acceder a la SelectedIndexChanged() y ItemActivate() eventos para cuando el usuario hace clic/doble clic en artículos respectivamente.

+0

¿Cómo agregar elementos a una vista de lista, donde sólo hay una columna que ocupa toda la anchura de la vista de lista, y un elemento por cada fila? cada vez que lo hago, agrega varios elementos por fila ... – wakurth

+0

Múltiples artículos por fila, suena como varias columnas que tiene allí. Verifique que agregue elementos a la matriz y no a las columnas. – invert

0

Sí, esto es posible:

Dim imgList As New ImageList 

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
    ListView1.View = View.Details 
    ListView1.Width = 500 

    ListView1.Columns.Add("Gender", 75, HorizontalAlignment.Left) 
    ListView1.Columns.Add("Name", 100, HorizontalAlignment.Left) 
    ListView1.Columns.Add("Notes", 350, HorizontalAlignment.Left) 
    ListView1.AllowColumnReorder = True 

    ListView1.Columns(0).DisplayIndex = 1 

    imgList.Images.Add("Male", Image.FromFile("C:\Users\Joe\Pictures\Male-Symbol.jpg")) 
    imgList.Images.Add("Female", Image.FromFile("C:\Users\Joe\Pictures\Female-Symbol.jpg")) 
    ListView1.SmallImageList = imgList 
End Sub 

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
    Dim index As Integer 
    Select Case True 
     Case RadioButton1.Checked 
      index = 0 
     Case RadioButton2.Checked 
      index = 1 
    End Select 

    Dim lvi As New ListViewItem 
    lvi.ImageIndex = index 
    lvi.SubItems.Add(TextBox1.Text) 
    ListView1.Items.Add(lvi) 
End Sub 
+0

Parece que funciona, pero la imagen es 16x16. ¿Cómo podemos cambiar el tamaño de la imagen? : | –

Cuestiones relacionadas