Avatar billede iakob Nybegynder
18. august 2004 - 09:42 Der er 3 kommentarer og
1 løsning

Hente objekter ud fra en listbox

Jeg har to listbokse i en dialog og nogle [Add >>] og [remove <<] knapper. Det der sker når man bruger knapperne er at man kan kopiere items i den ene listbox (A) over i den anden listbox (B) og fjerne dem fra B igen.

Når man så har udfyldt liste B til sin tilfredsstilelse så vil jeg gerne have de objekter ud, som jeg har fyldt på, men også med deres egen type.

Altså fx add ser således ud:
B.items.Add(A.items.selecteditem);

Listen a bliver udfyldt med objekter af egne klasser, når dialogen åbens:
myClass anObject = new myClass();
A.items.Add(anObject);

Jeg vil så gerne kunne håndtere de myClass'es der er havnet i liste B med følgende:
foreach(myClass anObject in B.items)
anObject.DoSomething();

Men så får jeg fejl:
An unhandled exception of type 'System.InvalidCastException' occurred in D20.exe

Additional information: Specified cast is not valid.

Dvs cast fra B.items (som er af typen Object) til myClass kan ikke gennemføres. Jeg har prøvet at lave cast:
foreach(object anObject in B.items)
{
myClass aMyClass = (myClass)anObject;
aMyClass.DoSomething();
}

Men det giver samme fejl.

Hvordan får jeg vendt et element i items-listen til myClass objekter?

PS. Jeg kunne godt lave en selvstændig liste (myClass[]) som blev ajourført sammen med liste B, men jeg vil gerne undgå den slags redundans.
Avatar billede finger Nybegynder
18. august 2004 - 09:49 #1
dette burde virke. hvis ikke så castes der til en forkert klasse.

foreach(object anObject in B.items)
{
((myClass)anObject).DoSomething();
}
Avatar billede wisen Nybegynder
18. august 2004 - 10:00 #2
du kan, som finger skriver, lave en foreach hvor du løber alle objekterne igennem og selv laver et check på typen...

foreach(object currentObj in B.items)
{
  if( currentObj is myClass )
  {
    ((myClass)anObject).DoSomething();
  }
  else if( currentObj is myClass2 )
  {
  /* doSomthingElse();
  }
}
Avatar billede iakob Nybegynder
18. august 2004 - 12:20 #3
Tak for hjælpen. Det viste sig naturligvis at jeg selv havde lavet en fejl (jeg havde sving i myClass1 og myClass2 og brugte dem altså forkert). Doh!
Avatar billede finger Nybegynder
18. august 2004 - 12:37 #4
ok. så var det jo som jeg foreslog.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester