2009-11-21 19 views
5

Ho set di immagini Web ospitate che ho bisogno del mio utente per poter selezionare 1 da ciascuna. Pensavo che un listbox avrebbe funzionato per questo, ma non riesco a capire di aggiungere un'immagine a uno. È possibile? modo migliore per farlo? Sto usando l'ultima versione gratuita vb.aggiungi immagini alla listbox (visual basic)

risposta

2

Impostare ListBox1.DrawMode a DrawMode.OwnerDrawFixed o DrawMode.OwnerDrawVariable e aggiungere un gestore per disegnare le immagini.

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 

È possibile aggiungere le immagini alla raccolta di elementi della lista.

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

Utilizzare il Listview control invece, fornisce una migliore funzionalità, e non soffre di un bug di ridimensionamento fastidioso. La casella di riepilogo viene trasferita da VB6 giorni. La listview supporta intestazioni di colonne, raggruppamenti e un po 'di più.

Aggiungere un controllo Imagelist al modulo, per memorizzare le immagini; imposta la proprietà ColorDepth su 32-bit e imposta la proprietà LargeImagelist di Listview sul controllo della lista immagini che hai appena aggiunto (tutto questo può essere fatto anche nel codice).

Aggiungere immagini al Imagelist tramite questo codice:

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

aggiungere elementi alla Listview tramite questo codice:

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

Il "imagekey" è un modo per dire al Listview quale immagine uso. Puoi anche usare gli indici per le icone, ma specificare un indice che non esiste darà un indice fuori dall'eccezione, mentre una chiave che non esiste, semplicemente non userà alcuna immagine.

Oh, si desidera impostare anche la proprietà Listview Multiselect su False (se si desidera solo selezionarne una alla volta) e accedere agli eventi SelectedIndexChanged() e ItemActivate() per quando l'utente fa clic/doppio clic sugli articoli rispettivamente.

+0

Come si fa ad aggiungere elementi a una visualizzazione elenco, in cui v'è solo una colonna che occupa l'intera larghezza della ListView e un elemento per riga? ogni volta che lo faccio, aggiunge più elementi per riga .... – wakurth

+0

Più elementi per riga, suona come più colonne che hai lì. Controlla di aggiungere alla matrice articoli e non alle colonne. – invert

0

Sì, questo è possibile:

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

Sembra funzionare, ma l'immagine è 16x16. Come possiamo ridimensionare l'immagine? : | –

Problemi correlati