Laden...

[erledigt] Zeige Image aus Imagelist in Listview subitem

Erstellt von CrimeTime vor 13 Jahren Letzter Beitrag vor 13 Jahren 9.557 Views
C
CrimeTime Themenstarter:in
28 Beiträge seit 2010
vor 13 Jahren
[erledigt] Zeige Image aus Imagelist in Listview subitem

Hallo,
ich versuche derzeitig mir in der ersten Spalte in meiner listView1 ein Icon Anzeigen zu lassen, die Images sind schon alle in der Imagelist geladen.

hier der Code wie ich es bisher nutze:


               imageList1.Images.Add("Pic1", Image.FromFile(@"C:\Bilder\Whey.png", true));
               listView1.Items.Add(new ListViewItem("Item1") { ImageKey = "Pic1" });

Problem hier ist das er halt eine neue Spalte benutzt (Item1), und dazu packt der das gleiche Bild immer und immer wieder in die listView wenn ich den code erneut ausführe.

Das Bild was Angezeigt werden sollte lese ich bereits aus (bildname.png) nun möchte ich gerne wissen wie ich das am besten anstelle.

Gruß Crime

L
416 Beiträge seit 2008
vor 13 Jahren

Problem hier ist das er halt eine neue Spalte benutzt (Item1), und dazu packt der das gleiche Bild immer und immer wieder in die listView wenn ich den code erneut ausführe.

Warum sollte auch etwas anderes passieren? Du erstellst jedes mal ein neues Listviewitem mit dem gleichen Icon. Irgendwie verstehe ich nicht wirklich was du erreichen willst und was das Problem ist.

C
CrimeTime Themenstarter:in
28 Beiträge seit 2010
vor 13 Jahren

ich erstelle mit diesem code eine neue Zeile:



string[] myItemsInt = new string[] 
     
                {
                    i.ToString(),
                    GetName(i),
                    GetTexture(i),
                    GetCount(i).ToString(),
                    GetLevel(i).ToString(),
                    GetMinBid(i).ToString(),
                    GetMinIncrement(i).ToString(),
                    GetBuyoutPrice(i).ToString(),
                    GetBidAmmount(i).ToString(),
                    GetTimeleft(i).ToString(),
                    GetOwner(i)
                };

               ListViewItem lvi = new ListViewItem(myItemsInt);
               listView1.Items.Add(lvi);

und genau in dieser Zeile möchte ich auch das ICON drinne haben, ist für jede Zeile ein anderes, der Name wird ausgelesen und der Name des Bildes in der Imagelist soll Angezeigt werden.

wenn noch Fragen offen sind, bitte posten.

F
155 Beiträge seit 2009
vor 13 Jahren

Hallo,

wenn du deine Imagelist zuerst richtig befüllst, und für die Instantiierung des ListViewItem diese Überladung verwendest sollte es so klappen wie du es willst.

fz

"We better hurry up and start coding, there are going to be a lot of bugs to fix."

C
CrimeTime Themenstarter:in
28 Beiträge seit 2010
vor 13 Jahren

gibts davon auch etwas genauers? z.B. solch einen Code:

imagelist1.images.imageskey = 2779;

Edit:

also ich mache es im Moment so:



               ListViewItem lvi = new ListViewItem(myItemsInt);
               ListViewItem myItem = new ListViewItem(@"C:\Images\");
               currentTextrue = GetTexture(i);
               string[] arrResult = currentTextrue.Split(new Char[] { '\\' });
               currentTextrue = (arrResult[2]);
               myItem.ImageKey = currentTextrue + ".png";
               listView1.Items.Add(lvi);
               imageList1.Images.Add(currentTextrue, Image.FromFile(@"C:\Images\" + currentTextrue + ".png", true));
               listView1.Items.Add(new ListViewItem("lvi") { ImageKey = currentTextrue });


funktionier recht gut nur das Problem is halt das er die Bilder nicht aus der Imagelist nimmt, und das er es in eine Neue Spalte packt und nicht in die wo es rein sollte.

F
155 Beiträge seit 2009
vor 13 Jahren

Hallo,

so sollte es gehen:


imageList1.Images.Add("testKey", Image.FromFile(@"Pfadbild"));

string[] items = new string[] { "item1", "item2", "item3" };

ListViewItem myItem = new ListViewItem(items, "testKey");

listView1.Items.Add(myItem);

  
myItem.ImageKey = currentTextrue + ".png"; //andere Key als unten einmal mit Endung einmal ohne  
//...  
imageList1.Images.Add(currentTextrue, Image.FromFile(@"C:\Images\" + currentTextrue + ".png", true));   

fz

"We better hurry up and start coding, there are going to be a lot of bugs to fix."

C
CrimeTime Themenstarter:in
28 Beiträge seit 2010
vor 13 Jahren

sorry glaube habe mich falsch ausgedrückt, ich möchte das er die Bilder aus der Imagelist benutzt und nicht von meiner Festplatte.

hier der Code den ich Aktuell benutze, aber dieser holt die Bilder von der Festplatte:



                    string[] myItemsInt = new string[] 
     
                {   placeholder,
                    i.ToString(),
                    GetName(i),
                    GetCount(i).ToString(),
                    GetLevel(i).ToString(),
                    GetMinBid(i).ToString(),
                    GetMinIncrement(i).ToString(),
                    GetBuyoutPrice(i).ToString(),
                    GetBidAmmount(i).ToString(),
                    GetTimeleft(i).ToString(),
                    GetOwner(i)
                };

               ListViewItem lvi = new ListViewItem(myItemsInt);
              
               currentTextrue = GetTexture(i);
               string[] arrResult = currentTextrue.Split(new Char[] { '\\' });
               currentTextrue = (arrResult[2]);

               imageList1.Images.Add(currentTextrue, Image.FromFile(@"C:\Images\" + currentTextrue + ".png", true));
               listView1.Items.Add(new ListViewItem(myItemsInt) { ImageKey = currentTextrue });

L
416 Beiträge seit 2008
vor 13 Jahren

ich möchte das er die Bilder aus der Imagelist benutzt und nicht von meiner Festplatte.

Ja und warum machst du es dann nicht einfach so?
Lad die Bilder im Designer in die Imagelist und gib zur Laufzeit den Key an. Wo ist das Problem?

C
CrimeTime Themenstarter:in
28 Beiträge seit 2010
vor 13 Jahren

wenn ich das so mache, dann sind 8,000 Bilder mit Zahlen besetzt, und dann alle 8,000 umbennen? glaube da bin ich ne woche beschäftigt.

F
155 Beiträge seit 2009
vor 13 Jahren

Hallo,

beschreib doch mal in Worten was du genau möchtest, nicht nur ständig diese Code Fragmente posten.

Wie ich das verstanden habe möchtest du 8000 Bilder in einer Imagelist verwalten und diese dann per Key in einer Listview anzeigen, pro Zeile eine anders Bild? Wo genau liegt nun dein Problem?

fz

"We better hurry up and start coding, there are going to be a lot of bugs to fix."

C
CrimeTime Themenstarter:in
28 Beiträge seit 2010
vor 13 Jahren

also ich habe genau das vor was du geschrieben hast, doch leider haben die 8000Bilder alle einen Key zu gewiesen bekommen, und die über diesen Key aufrufen ist sehr Kompliziert dann müsste ich für 8000Bilder jeweils einen key machen das würde so aus sehen

bildname1 = Imagelist.Imagekey[0]

ich hätte gerne die Bilder so in der Imagelist, das ich sie bei ihrem richtigen Bildname aufrufen kann, und nicht bei ihrem key.

L
416 Beiträge seit 2008
vor 13 Jahren

ich hätte gerne die Bilder so in der Imagelist, das ich sie bei ihrem richtigen Bildname aufrufen kann, und nicht bei ihrem key.

Dann füg die Bilder auch mit dem entsprechenden (String-) Key der ImageList hinzu. Das hat F.Z. auch schon oben gepostet.

Und gewöhn dir an bei einer Frage alle relevanten Informationen rauszugeben damit man dir nicht alles aus der Nase ziehen muss.

C
CrimeTime Themenstarter:in
28 Beiträge seit 2010
vor 13 Jahren

ich denke mir wenn ich das so einmal gemacht habe und dann den Ordner lösche wo die Bilder drinne waren, hagelt es Fehlermeldungen weil er den Pfad nicht finden kann.

Habe es noch nicht getestet aber nur mal so rein aus dem Logischen Denken.

L
416 Beiträge seit 2008
vor 13 Jahren

Dann leg dir die Dateinamen als Property deiner Objekte die du in der ListView anzeigen willst ab. Wenn die Bilder einmal in der ImageList sind spielt es keine Rolle was mit dem Ordner wo sie herkamen passiert (ausser natürlich du greifst weiterhin aus dem Code darauf zu).

49.485 Beiträge seit 2005
vor 13 Jahren

Hallo CrimeTime,

ich denke mir wenn ich das so einmal gemacht habe und dann den Ordner lösche wo die Bilder drinne waren, hagelt es Fehlermeldungen weil er den Pfad nicht finden kann.

keine Ahnung, wie du darauf kommst. Die Keys sind einfache, beliebige Namen. Ob du da den Pfad verwendest oder was anderes, kannst du dir aussuchen. .NET ist es egal und stellt daher auch keinen Bezug zu den Pfaden auf der Festplatte her.

Andersherum wird die Image-Liste natürlich erst zur Laufzeit erstellt und zu diesem Zeitpunkt muss das Programm natürlich die Bilder laden können. Wenn du die Bilder nicht auf der Festplatte haben willst, kannst du sie als Ressourcen ins Programm packen, siehe Ressourcen in Anwendungen. Das hat aber nichts mit der ursprünglichen Frage zu tun.

Habe es noch nicht getestet aber nur mal so rein aus dem Logischen Denken.

Bitte erst testen, dann fragen/posten.

herbivore

C
CrimeTime Themenstarter:in
28 Beiträge seit 2010
vor 13 Jahren

Dann leg dir die Dateinamen als Property deiner Objekte die du in der ListView anzeigen willst ab. Wenn die Bilder einmal in der ImageList sind spielt es keine Rolle was mit dem Ordner wo sie herkamen passiert (ausser natürlich du greifst weiterhin aus dem Code darauf zu).

also wenn ich dies so mache wie man es bei der Imagelist macht z.B. klicke unten bei der Form auf die Imagelist1, dann auf Choose Images und suche dann per Add das Bild was ich gerne drinne haben möchte und wähle es aus das es rein geladen wird.

Habe ich das Problem das er diesem Bild Automatisch den Imagekey "0" zuweist, doch ich hätte gerne das er dem Bild den Bildname zuweist.

Bitte um genaue Beschreibung wie man dies macht, nicht das dieser Thread noch länger wird als er so schon ist wegen den Unklarheiten.

Gruß Crime

F
155 Beiträge seit 2009
vor 13 Jahren

Hallo,

welche Entwicklungsumgebung verwendest du? Visual Studio verwendet bei mir so wie du es möchtest den Namen als Imagekey

fz

"We better hurry up and start coding, there are going to be a lot of bugs to fix."

C
CrimeTime Themenstarter:in
28 Beiträge seit 2010
vor 13 Jahren

Visual Studio 2010 Professional
Version 10.0.30319.1 RTMRel

L
416 Beiträge seit 2008
vor 13 Jahren

Bist du dir sicher das er als ImageKey "0" nimmt und nicht als ImageIndex? Bei mir sind auch die Dateinamen die ImageKeys der Bilder. (Habe die identische VS Version wie du)

C
CrimeTime Themenstarter:in
28 Beiträge seit 2010
vor 13 Jahren

dann wird es wohl daran liegen das ich es Falsch verwendet habe, hier mein Aktueller Code um das Bild einzufügen:


listView1.Items.Add(new ListViewItem(myItemsInt) { ImageKey = currentTextrue });

currentTextrue ist wie gehabt der Bildname ohne Extension.

Edit: genaud as war das Problem das es ohne Extension war 😉 Gelöst!