---
title: "Iconer i combobox?"
type: "forum-thread"
url: "https://www.webforum.nu/amne/dotnet/75168-iconer-i-combobox"
topic: ".NET"
topic_url: "https://www.webforum.nu/amne/dotnet"
author: "saw"
published: "2003-04-27T11:31:04.000Z"
updated: "2003-05-06T20:37:48.000Z"
replies: 24
views: 553
page: 1
pages: 2
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/dotnet/75168-iconer-i-combobox"
---

# Iconer i combobox?

_Sida 1 av 2._

## #1 — saw, 2003-04-27T11:31Z

Kan manpå någotvis lägga in iconer i en combobox? :q

Permalänk: https://www.webforum.nu/p/75168

## #2 — niko, 2003-04-27T17:33Z

Iofs en Listbox men principen borde vara samma: <http://www.codeproject.com/cs/combobox/glistbox.asp>.

Permalänk: https://www.webforum.nu/p/1026293

## #3 — saw, 2003-04-28T17:54Z

Jag får det tyvärr inte att fungera.

Permalänk: https://www.webforum.nu/p/1027074

## #4 — saw, 2003-04-30T22:31Z

Skulle vara tacksam om någon skulle vilja förklara för mig om public class?
Är det en egen class-fil, eller skall det bara in i formen?

Permalänk: https://www.webforum.nu/p/1031779

## #5 — niko, 2003-05-01T19:50Z

Nu har jag inte testat koden, men var du deklarerar *GListBoxItem* och *GListBox* saknar betydelse. Du kan lägga dem i varsin klassfil, i två klassfiler eller tom i samma fil som formen (fast i såf utanför formets klass, så klart).

Sen måste du också se till att den listbox du använder på formet ärver av *GListBox*.

Permalänk: https://www.webforum.nu/p/1032501

## #6 — saw, 2003-05-02T10:16Z

\>
\>Sen måste du också se till att den listbox du använder på \>formet ärver av GListBox.
Med det menar du listbox1 new GListBox?
Under ToDo?

Permalänk: https://www.webforum.nu/p/1032871

## #7 — saw, 2003-05-03T08:43Z

Jag har problem.

```
if (item.ImageIndex != -1)
{
imageList.Draw(e.Graphics, bounds.Left,bounds.Top,item.ImageIndex);
e.Graphics.DrawString(item.Text, e.Font, new SolidBrush(e.ForeColor), 
bounds.Left+imageSize.Width, bounds.Top);
}
```

Error:
E:\\C#\\SAW\\SAW\\frmKunder.cs(1499): Cannot access a nonstatic 
member of outer type 'SAW.frmKunder' via nested
 type 'SAW.frmKunder.GListBox'

Är det dags att ge upp?

Permalänk: https://www.webforum.nu/p/1033574

## #8 — niko, 2003-05-03T09:00Z

Av felmeddelandet så låter det som om du deklarerat *GListBox*  inuti Formens klass. Ungefär så här

```
	public class frmKunder : System.Windows.Forms.Form
	{
		public class GListBox 
		{
			// Koden för GlistBox.
		}
		//Koden för Formet.
	}
```

Varken GListBox eller GListBoxItem kan vara inre klasser du måste alltså deklarera klasserna utanför varandra om de ligger i samma fil:

```
	public class GListBox 
	{
		// Koden för GlistBox.
	}

	public class GListBoxItem
	{
		// Koden för GListBoxItem.
	}

	public class frmKunder : System.Windows.Forms.Form
	{

		//Koden för Formet.
	}
```

Permalänk: https://www.webforum.nu/p/1033580

## #9 — saw, 2003-05-03T17:47Z

Jag har gjort precis som du har visat. Där finns desutom imgelist som det skall vara.
Trots detta så får jag error:

```
E:\C#\SAW\SAW\frmKunder.cs(1532): The type or namespace 
name 'frmKunder' could not be found (are you missing a using 
directive or an assembly reference?)
```

Om jag lägger det i en egen class-fil, så får jag samma error.

Permalänk: https://www.webforum.nu/p/1033890

## #10 — niko, 2003-05-04T09:28Z

> **saw skrev:**
>
> Om jag lägger det i en egen class-fil, så får jag samma error.

Om du verkligen lagt klasserna utanför varandra men inom samma namespace så borde du ju inte kunna få det felet. Men det är svårt att säga vad som är fel om man inte ser nån kod.

Det verkar i vilket fall som helst finnas ett fel i koden för GListBox:

```
imageList.Draw(e.Graphics, bounds.Left,bounds.Top
```

borde vara:

```
_myImageList.Draw(e.Graphics, bounds.Left,bounds.Top
```

 .. tycker jag?

Permalänk: https://www.webforum.nu/p/1034175

## #11 — saw, 2003-05-04T16:14Z

Hej Niko, och hjättetack för att du försöker.
Detta är gjort:

Hela koden ligger kopierad nedanför namnspacen(den är lite lång så jag ville inte klistra in den).
Sen i under ToDo, så drar den igång en class, där:

```
GListBox lb = new GListBox();
			lb.ImageList = imageList;
			lb.Items.Add( new GListBoxItem("Image 1",0));
			lb.Items.Add( new GListBoxItem("Image 2",1));
			lb.Items.Add(new GListBoxItem("Hej o hopp",1));
```

Nu får jag inga som helst error......men inte heller någonting i listboxen.
Jag har t o med döpt listboxen i samma namn...

Permalänk: https://www.webforum.nu/p/1034499

## #12 — niko, 2003-05-04T17:48Z

> Nu får jag inga som helst error......men inte heller någonting i listboxen.

OK, men du måste kodmässigt lägga listboxen på Formen också (this.Controls.AddRange ..) och lägga in ikoner i imagelisten. Man kan inte påstå att det direkt framgår av artikeln.

Men nu är C#/VS.NET tyvärr lika bökigt att diskutera utan att se hela projektkoden som C++/MFC.

Så för enkelhetens skull:
<http://member.webforum.nu/3773/sawbox.zip>

1\. Jag har definierat GListBox och GListBoxItem i en egen klassfil.

2\. Jag har placerat en imagelist med 3 ikoner i på formuläret.

3\. Jag har lagt en helt vanlig Listbox på formuläret och sen i koden ändrat manuellt så att den ärver av GListBox istället för ListBox.

4\. Jag lägger till raderna:

```
this.Controls.AddRange(new System.Windows.Forms.Control[] {this.lb});
this.lb.ImageList = this.imageList1;
lb.Items.Add( new GListBoxItem("Image 1",0));
lb.Items.Add( new GListBoxItem("Image 2",1));
lb.Items.Add( new GListBoxItem("Image 3",2));
```

I form_load (den första raden flyttar jag från InitializeComponent, se nedan).

5\. Som du ser så funkar det (förhoppningsvis) även hos dig när du kör programmet (i design ser du inget).

Om du vill se Listboxen *även* under design (för att tex ändra storlek) så kan du flytta:

```
this.Controls.AddRange(new System.Windows.Forms.Control[] {this.lb});
```

till slutet av InitializeComponent-funktionen fast då får du ett felmeddelande i designläget som egentligen inte spelar nån roll (men det är irriterande).

Och slutligen:

Ändrar du:

```
	public class GListBox : ListBox
```

till:

```
	public class GListBox : ComboBox
```

så får du en combobox med ikoner. Det funkar lika bra.

Permalänk: https://www.webforum.nu/p/1034559

## #13 — saw, 2003-05-04T19:59Z

Tack för ditt fina arbete. Din application fungerar(narturligtvis).
Jag försöker då att göra likadant...
Classfilen, inga problem.

Laddar jag:
listBoxTotal.Items.Add( new GListBoxItem("Image 1",0));
listBoxTotal.Items.Add( new GListBoxItem("Image 2",1));
så syns TEXTEN
Lägger jag denna innan(som du):
this.Controls.AddRange(new System.Windows.Forms.Control\[\]
 {this.listBoxTotal});
Då blir min listbox helt brunfärgad, ingenting syns längre.

Du har kämpat väl med mig, men det verkar som om jag inte skall få mina iconer...

Permalänk: https://www.webforum.nu/p/1034673

## #14 — niko, 2003-05-04T20:10Z

> Laddar jag: 
> listBoxTotal.Items.Add( new GListBoxItem("Image 1",0)); 
> listBoxTotal.Items.Add( new GListBoxItem("Image 2",1)); 
> så syns TEXTEN

Menar du *bara* texten? Har du lagt in ikoner i din imagelist?

> Lägger jag denna innan(som du): 
> this.Controls.AddRange(new System.Windows.Forms.Control\[\] 
> {this.listBoxTotal}); 
> Då blir min listbox helt brunfärgad, ingenting syns längre.

I designläge eller även vid körning?

Men som sagt det är svårt att svara utan att se hela projektkoden (inkl. de autogenererade sektionerna). Har du möjlighet att zippa ihop och posta projektet så gör gärna det (kommentera gärna bort specifika saker som databaskod och övrigt som inte går att köra för andra).

Permalänk: https://www.webforum.nu/p/1034693

## #15 — saw, 2003-05-04T23:58Z

Svar: 1
Jo jag har en imagelist och har lagt in ikoner där.
Svar: 2
Nej bara när jag kör.
Jag letar som f-n, misstänker att jag har fått någon "skräpkod" någonstans, kanske är det just det som gör felet.

Permalänk: https://www.webforum.nu/p/1034853

## #16 — saw, 2003-05-05T09:54Z

OK, då har jag zippat filen, och laggt den här.
Någonstans så har /gör jag fel, för när jag "lekte" med din app. inga som helst problem, men på min!!

Vad jag skall ha iconerna till, är att jag vill kolla mot databasen om kunden fått en cd, isf så skall en icon för cd dyka upp, annars ingenting.

Vad jag har upptäckt är detta:
När jag lägger in private GListBox lb; så får jag problem error menar att lb redan finns i form1(frmKunder).

Jag vore väll inte så förvånad om du direct hittar felet(n), jag är ju nybörjare på det här.

Bilagor:

- [saw.zip](https://www.webforum.nu/a/1392.zip)

Permalänk: https://www.webforum.nu/p/1035018

## #17 — niko, 2003-05-05T17:36Z

> Jag vore väll inte så förvånad om du direct hittar felet

Eh, jo .. riktigt så telepatisk är jag inte. Allvarligt talat, jag har ingen möjlighet att köra din kod. Dels så saknar jag en massa lib/klasser som du använder (labelgradient, wildgrape mm ..). Dels hittar jag ingen definition av dina GlistBox och GListBoxItem (har du dem förkompilerade i namespacet listcontrols?). 

Så summa summarum: Vad jag än hittar på i din kod så blir det rena gissningsleken eftersom jag inte kan kompilera utan att lägga ner en massa extra-tid, tyvärr. Så istället får du en step-by-step för en ny listbox.

1\. Dra ut en listbox på formuläret.
2\. Döp om den till "dinListBox".
3\. Ändra i den auto-genererade formulärkoden från:

```
private System.Windows.Forms.ListBox dinListBox;
```

till:

```
private listcontrols.GListBox dinListBox;
```

och från

```
this.dinListBox = new System.Windows.Forms.ListBox.GListBox();
```

till:

```
this.dinListBox = new listcontrols.GListBox();
```

4\. I formulärets Load-event skriver du:

```
this.dinListBox.ImageList=imageList1;
```

5\. Sen placerar du kod i stil med:

```
dinListBox.Items.Add( new listcontrols.GListBoxItem("Image 1",0));
```

i de events där du vill ha dem (SelectedIndexChanged tex).

Gör du bara *exakt* så varje gång du skapar en listbox/combobox så *kommer* det att funka. (Du kommer att se ett felmeddelande i listboxen under design-läget, men det spelar ingen roll när du sen kör koden.)

(Jag förutsätter också att du ändrat imageList till \_myImageList i definitionen av GListBox som jag skrev ovan.)

Permalänk: https://www.webforum.nu/p/1035443

## #18 — saw, 2003-05-05T19:09Z

Ok det ser vi ut som lätt som en plätt.
Jag är ju dig evigt tacksam, men du blir nu besviken.

```
E:\C#\SAW\SAW\frmKunder.cs(94): The type or namespace 
name 'Listcontrols' could not be found (are you missing a using 
directive or an assembly reference?)
```

Jag har alltså gjort precis som du har beskrivit och jag får detta medelande, och ingen synlig listbox.

I bland så är det inte särskillt kul...

Permalänk: https://www.webforum.nu/p/1035556

## #19 — niko, 2003-05-05T19:48Z

> Jag har alltså gjort precis som du har beskrivit

Inte *exakt*, faktiskt. C# är känsligt för små/stora bokstäver. Jag chansade på att GListBox och GListBoxItem låg i ett  namespace som heter listcontrols (litet "l") eftersom det fanns en saknad referens som hette just så.

Typ:

```
namespace listcontrols
{
	public class GListBoxItem
	{
		//Kod för GListBoxItem
	}

	// GListBox class 
	public class GListBox : ListBox
	{
		//Kod för GListBox
	}
}
```

Heter namespacet nåt annat så får du ändra därefter.

Permalänk: https://www.webforum.nu/p/1035603

## #20 — saw, 2003-05-06T12:03Z

Niko.
Tack det FUNGERAR....
Bara ett smolk i bägaren, jag kan inte längre se listboxen i designläge. Den försvann så fort som jag kompilerade koden.

Ett annat fel, jag kan inte fånga click-händelsen.
Jag försökte så här:
Innan listboxen(dinListBox) blev osynlig, så dubbelklickade jag på den för att få fram koden får click

```
private void dinListBox_SelectedIndexChanged(object sender, 
System.EventArgs e)

		{
		UppdateraInfo();
		}
```

Men ingenting händer...

(PS \[nu får du int bli förtvivlad\] hur skulle man gå till väga om man ville göra detta till en user  controll?)

Tack för all din hjälp.

Permalänk: https://www.webforum.nu/p/1038929

---

Tråden på webben: https://www.webforum.nu/amne/dotnet/75168-iconer-i-combobox  
Nästa sida: https://www.webforum.nu/amne/dotnet/75168-iconer-i-combobox/page2.md
