Avatar billede Slettet bruger
05. maj 2010 - 01:33 Der er 10 kommentarer og
1 løsning

onChange problemer med en combobox

Jeg har en combobox1 hvor den aktuelle tekst bliver gemt i en txt fil.

Den combobox har 2 items

f.eks.

test1
test2

Når jeg gemmer i txt fil så tager den test1, og ikke test2, på trods af at test2 er den valgte items.

Jeg indsætter fra txt fil med den her kode:

Combobox1.Text:= Memo1.Lines[13];

Og gemmer memo1 den med den her kode:

Memo1.Lines.Add(combobox1.Text);

Jeg har en kode i min OnChange i combobox1:

begin
if
Combobox1.ItemIndex = 0 then
image2.Picture.LoadFromFile('skib.bmp')ELSE
image2.Picture.LoadFromFile('alb.bmp')
Avatar billede martinlind Nybegynder
05. maj 2010 - 11:25 #1
prøv evt. at kigge på din indsæt, du indsætter lines[13] hver gang, skal du det, og du tilføjer ialtid til bunden af din memo ?
Avatar billede hrc Mester
05. maj 2010 - 12:25 #2
Comoboboksen har en Items.LoadFromFile og tilsvarende en SaveToFile. Dem kan du bruge til at indlæse og gemme.

Konstruktionen har en svaghed idet du forventer at der på linje 1 skal åbnes en bestemt fil. Det går galt hvis listen sorteres eller at en linje fjernes. Hvis du vil være uafhængig af rækkefølgen i listen kan du bruge den Objects-liste der hænger på Items. Denne liste er beregnet til objekter, men der er ikke noget der forhindrer dig i at placere et tal på pladsen (en pointer til et objekt er en 4-byte størrelse og den kan bruges til tal også):

Så kan du gøre følgende:

ComboBox.Items.BeginUpdate;
try
  ComboBox.Items.Clear;
  ComboBox.AddObject('Moster Ada',TObject(1)); // = fil1.bmp
  ComboBox.AddObject('Moster Henny',TObject(2)); // = fil2.bmp
  ComboBox.AddObject('Moster Dora',TObject(3)); // = fil3.bmp
finally
  ComboBox.Items.EndUpdate;
end;

I din OnChange kunne det så laves sådan her:

begin
  if ComboBox.ItemIndex >= 0 then
    case integer(ComboBox.Items.Objects[ComboBox.ItemIndex]) of // type caster tilbage igen
      1: Image.Bitmap.LoadFromFile('fil1.bmp');
      2: Image.Bitmap.LoadFromFile('fil2.bmp');
      3: Image.Bitmap.LoadFromFile('fil3.bmp');
    end;
end;


På den måde er du helt ligeglad med rækkefølgen i listen.

Den helt forkromede løsning var at koble et rigtigt objekt på hver linje i comboboksen. Dette objekt skulle så indeholde oplysninger om de enkelte billeder. Med al respekt er det nok en tand for avanceret p.t.
Avatar billede hrc Mester
05. maj 2010 - 12:25 #3
(LoadFromFile og SaveToFile dur ikke med den løsning jeg har skitseret her)
Avatar billede martinlind Nybegynder
05. maj 2010 - 15:46 #4
hrc >> nice :-)
( du fyrer den af.. hehe, dejligt at se )
Avatar billede Slettet bruger
05. maj 2010 - 17:59 #5
#1

Jo den linie13 er nødvendig da den bestemmer hvilket billede der skal vises, når txt filen indlæses i comboboxen.

Jeg har på en måde fået det til at virke ved at slette en uhensigtmæssig memeo1.clear;

Billederne skifter så ikke, men det er som sådan heller ikke vigtigt.

Men det som jeg bare ikke forstår er at med 2 items i en combobx så burde det billedeskift virke, alt efter om det er item1 eller item2 som er den viste text i comboen...
Avatar billede hrc Mester
05. maj 2010 - 20:58 #6
Martin: Ja, jeg går af vejen for at bringe forvirringen op på et højere plan. Det er mit mål i livet, at efterlade en hob af forvirrede mennesker bag mig.
Avatar billede Slettet bruger
08. maj 2010 - 01:33 #7
Jeg må hellere få lukket det her spørgsmål....

Point anybody?
Avatar billede martinlind Nybegynder
08. maj 2010 - 12:21 #8
du må dele ud efter fortjeneste :-)
Avatar billede Slettet bruger
12. maj 2010 - 19:53 #9
Lige en afsluttende bemærkning til skift af billede ud fra Itemindex i Combobox...

Her var løsningen at lægge følgende kode ind i load txt fil

if
Combobox1.ItemIndex = 0 then
image2.Picture.LoadFromFile('skib.bmp')ELSE
image2.Picture.LoadFromFile('alb.bmp');
Avatar billede hrc Mester
12. maj 2010 - 21:08 #10
sharon: ... og hvor vil du så hen med den kommentar? I øvrigt en rigtig dårlig løsning.
Avatar billede Slettet bruger
12. maj 2010 - 22:40 #11
ok..kan godt se kommentaren ikke er god med den løsning...lidt hovsa...
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
Kurser inden for grundlæggende programmering

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