|
| 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
| |
|
|