/ Forside / Teknologi / Udvikling / Delphi/Pascal / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
Can't assign a TCombobox to TStringlist
Fra : Kurt G


Dato : 05-02-07 15:02

Hej NG.

Jeg vil gerne have sorteret og fjernet dubletter i en ComboBox og mente at
kunne gøre det på denne måde:

S1 er en StringList, cbOrdOpslag er en ComboBox.

1 S1 := TStringList.Create;
2 S1.Sorted := True;
3 S1.Duplicates := dupIgnore;
4 S1.Assign(cbOrdOpslag);
5 cbOrdOpslag.Assign(S1);
6 S1.Destroy;

Compileringen går OK, men under kørsel får jeg fejlmeldingen 'Can't assign a
TCombobox to TStringlist' i linie 4.
Jeg har prøvet at kommentere linie 4 ud, så kommer fejlen 'Can't assign a
TStringlist' to TCombobox i linie 5.

Hvorfor har compileren undladt at gøre opmærksom på fejlen, eller er det
ikke en fejl?

Det undrer mig i særdeleshed fordi dette under FormCreate går godt:
//Hent opslagsord
S1.Clear;
S1.Duplicates := dupIgnore; //Fjern dubletter
S1.Sorted := True;
S1.LoadFromFile('Opslagsord.txt');
cbOrdOpslag.Items.Assign(S1);

Mvh Kurt



 
 
Brian Andersen \(www~ (05-02-2007)
Kommentar
Fra : Brian Andersen \(www~


Dato : 05-02-07 15:40

Hej Kurt,

mine svar følger...


> 1 S1 := TStringList.Create;
> 2 S1.Sorted := True;
> 3 S1.Duplicates := dupIgnore;
> 4 S1.Assign(cbOrdOpslag);
> 5 cbOrdOpslag.Assign(S1);
> 6 S1.Destroy;
>
> Compileringen går OK, men under kørsel får jeg fejlmeldingen 'Can't assign
> a TCombobox to TStringlist' i linie 4.
> Jeg har prøvet at kommentere linie 4 ud, så kommer fejlen 'Can't assign a
> TStringlist' to TCombobox i linie 5.
>
> Hvorfor har compileren undladt at gøre opmærksom på fejlen, eller er det
> ikke en fejl?

Compileren giver ikke fejl, da al din kode er syntaks korrekt. Du får en
fejl, fordi VCL - koden rejser en undtagelse.

Linje 4 skal skrives på følgende måde så objekterne passer til hinandens
Assign metode.
S1.Assign(cbOrdOpslag.Items);

Din linje 5 skal så således ud:
cbOrdOpslag.Items.Assign(S1);


> Det undrer mig i særdeleshed fordi dette under FormCreate går godt:
> //Hent opslagsord
> S1.Clear;
> S1.Duplicates := dupIgnore; //Fjern dubletter
> S1.Sorted := True;
> S1.LoadFromFile('Opslagsord.txt');
> cbOrdOpslag.Items.Assign(S1);

Du kvalificere ikke til det korrekte objekt. Du skal have fat i Items
objektet, hvis klasse nedarves fra TStrings. Se mine korrektioner fra
ovenstående.

Jeg tænkte i øvrigt på, om du ikke kunne droppe dit S1 objekt helt. Og,
anvende følgende i stedet?

cbOrdOpslag.Items.Sorted := True;
cbOrdOpslag.Items.Duplicates := dupIgnore;

/Brian



Kurt G (05-02-2007)
Kommentar
Fra : Kurt G


Dato : 05-02-07 17:24

KLIPPET
> Compileren giver ikke fejl, da al din kode er syntaks korrekt. Du får en
> fejl, fordi VCL - koden rejser en undtagelse.
>
> Linje 4 skal skrives på følgende måde så objekterne passer til hinandens
> Assign metode.
> S1.Assign(cbOrdOpslag.Items);
>
> Din linje 5 skal så således ud:
> cbOrdOpslag.Items.Assign(S1);

Det virker!

Klippet

> Jeg tænkte i øvrigt på, om du ikke kunne droppe dit S1 objekt helt. Og,
> anvende følgende i stedet?
> cbOrdOpslag.Items.Sorted := True;
> cbOrdOpslag.Items.Duplicates := dupIgnore;

Det et giver ikke nogen responce med forslag, hvis jeg skriver
'cbOrdOpslag.Items.d', så jeg går ud fra, at den ikke er gyldig.

Mange tak for hjælpen.
/Kurt



Søg
Reklame
Statistik
Spørgsmål : 177577
Tips : 31968
Nyheder : 719565
Indlæg : 6409071
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste