Icone in ListView Compact Framework

venerdì 09 gennaio 2009 - 13.34

redcloud Profilo | Newbie

Salve, sto lavorando con il Compact Framework 3.5 e mi piacerebbe sapere se è possibile inserire un'icona in una ListView per ogni elemento. Apparentemente un ListViewItem può gestire soltanto testo...

Ad ogni modo la mia necessità è quella di disporre automaticamente delle icone all'interno di un Form, se c'è quindi un modo alternativo all'utilizzo di una ListView è bene accetto.

aiedail92 Profilo | Expert

Ciao

Per farlo devi creare un controllo di tipo ImageList (lo puoi fare dal designer) e aggiungere a questo tutte le immagini che possono avere le icone, quindi sempre dal designer assegni alla proprietà LargeImageList o SmallImageList il controllo ImageList che hai creato, e ad ogni ListViewItem attribuisci l'indice dell'immagine che deve avere mediante la proprietà ImageIndex. Infine devi impostare la proprietà View del ListView su SmallIcon o LargeIcon.

Luca

redcloud Profilo | Newbie

Avevo provato anche io a fare qualcosa del genere ma quando aggiungo imageList dal designer mi da errori su queste righe:

this.imageList1 = new System.Windows.Forms.ImageList(this.components);
this.listView1.UseCompatibleStateImageBehavior = false;
this.imageList1.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList1.ImageStream")));
this.imageList1.TransparentColor = System.Drawing.Color.Transparent;
this.imageList1.Images.SetKeyName(0, "a.jpg");

rispettivamente

Error 2 'System.Windows.Forms.ImageList' does not contain a definition for 'ImageStream' and no extension method 'ImageStream' accepting a first argument of type 'System.Windows.Forms.ImageList' could be found (are you missing a using directive or an assembly reference?) Main.Designer.cs 108 29

Error 3 The type or namespace name 'ImageListStreamer' does not exist in the namespace 'System.Windows.Forms' (are you missing an assembly reference?) Main.Designer.cs 108 66

Error 4 'System.Windows.Forms.ImageList' does not contain a definition for 'TransparentColor' and no extension method 'TransparentColor' accepting a first argument of type 'System.Windows.Forms.ImageList' could be found (are you missing a using directive or an assembly reference?) Main.Designer.cs 109 29

Error 5 'System.Windows.Forms.ImageList.ImageCollection' does not contain a definition for 'SetKeyName' and no extension method 'SetKeyName' accepting a first argument of type 'System.Windows.Forms.ImageList.ImageCollection' could be found (are you missing a using directive or an assembly reference?) Main.Designer.cs 110 36

aiedail92 Profilo | Expert

Prova a rimuovere le righe di codice "incriminate", poi imposta solo le proprietà che ti ho consigliato come ti ho detto, quindi ricompila. Io ho fatto la prova e non mi dà nessun errore...

Luca

redcloud Profilo | Newbie

Hai provato a farlo da un progetto per Windows Mobile 5? E' come se il designer scrivesse codice per il framework standard, non compact framework.

aiedail92 Profilo | Expert

Si, ho fatto la prova con tutte le piattaforme che usano il Compact Framework, incluse Windows Mobile 5.0 Smartphone e Pocket PC, nessuna mi ha dato problemi.

Comunque se non riesci a farlo direttamente dal designer, puoi sempre inserire il codice a mano...

Luca

redcloud Profilo | Newbie

Non so come settare le proprietà. Puoi incollarmi il codice (di listview e imagelist) che ti genera il designer? Sto leggendo ora che è un problema di visual studio il fatto che il designer stia usando i componenti per .NET anzichè per CF.

aiedail92 Profilo | Expert

Questo è quello che riguarda il ListView e i suoi oggetto:

listViewItem1.ImageIndex = 0; listViewItem1.Text = ""; listViewItem2.ImageIndex = 1; listViewItem2.Text = ""; listViewItem3.ImageIndex = 2; listViewItem3.Text = ""; this.tuoListView.Items.Add(listViewItem1); this.tuoListView.Items.Add(listViewItem2); this.tuoListView.Items.Add(listViewItem3); this.tuoListView.LargeImageList = this.tuaImageList; this.tuoListView.Location = new System.Drawing.Point(3, 3); this.tuoListView.Name = "tuoListView"; this.tuoListView.Size = new System.Drawing.Size(234, 287); this.tuoListView.TabIndex = 0;

Questo invece è il codice della ImageList:

this.tuaImageList.ImageSize = new System.Drawing.Size(64, 64); this.tuaImageList.Images.Clear(); this.tuaImageList.Images.Add(((System.Drawing.Image)(resources.GetObject("resource")))); this.tuaImageList.Images.Add(((System.Drawing.Image)(resources.GetObject("resource1")))); this.tuaImageList.Images.Add(((System.Drawing.Image)(resources.GetObject("resource2"))));

resources.GetObject("resourcex") fa riferimento alle immagini che ho aggiunto alla ImageList dal designer, ma se vuoi le puoi sostituire con delle immagini aperte da dei file oppure salvate nelle Resources del tuo progetto.

Luca

redcloud Profilo | Newbie

C'è un problema di fondo perchè non riesco a deployare l'applicazione. Se invece quei componenti non li uso è tutto ok. Mi sa si è incasinato in qualche modo visual studio. Uff.

aiedail92 Profilo | Expert

Per fare i test usi un device reale oppure l'emulatore di Visual Studio? Io uso l'emulatore, non vorrei che la ListView non sia supportata sulla piattaforma che invece usi tu...

Luca

redcloud Profilo | Newbie

No anche io emulatore.

aiedail92 Profilo | Expert

Prova ad eliminare le righe di codice che ti danno errore, salvare tutto (senza compilare), chiudere la soluzione ed eliminare dalla cartella del progetto le sottocartelle Bin e Obj, quindi prova a riaprire il progetto e compilarlo.

Fammi sapere...

Luca

redcloud Profilo | Newbie

Perfetto, ora funziona, ho dovuto fare pulizia come hai detto e ho scritto il codice a mano. Ora funziona! Grazie mille!
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5