Avatar billede w13 Novice
15. august 2007 - 21:46 Der er 10 kommentarer og
1 løsning

Gå til sidste element i ListBox bliver gå til 2. sidste element

Hej Eksperter.

Jeg har en ListBox kaldet CodeBox1, og på den har jeg en OnKeyDown-procedure:
-------------------------------------
procedure TForm1.CodeBox1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Key=VK_RETURN then CodeBox1DblClick(Sender)
  else if (Key=VK_UP) and (CodeBox1.Selected[0]) then CodeBox1.ItemIndex:=CodeBox1.Items.Count-1
  else if (Key=VK_DOWN) and (CodeBox1.Selected[CodeBox1.Items.Count-1]) then CodeBox1.ItemIndex:=0;
end;
-------------------------------
If-betingelsen gør, at der simuleres dobbeltklik på det valgte object, når man trykker enter, og når man trykker enten pil op eller pil ned, burde man gerne ryge til henholdsvis sidste og første Item på listen. Det gør man selvfølgelig ikke! Man ryger til enten det anden sidste eller anden første Item.. Har forsøgt at debugge og har nu givet op. Hvordan kan det være, denne fejl opstår?

Hvis jeg f.eks. retter "Count-1" til "Count" eller siger "itemindex:=-1" i stedet for "itemindex:=0", så får jeg en fejlmeddelelse nogle af gangene, andre gange er der bare intet resultat.

Håber I kan hjælpe mig og på forhånd tak.
Avatar billede bubbaa Nybegynder
15. august 2007 - 22:10 #1
else if (Key=VK_UP) and (CodeBox1.Selected[0]) then CodeBox1.ItemIndex:=CodeBox1.Items.Count
else if (Key=VK_DOWN) and (CodeBox1.Selected[CodeBox1.Items.Count-1]) then CodeBox1.ItemIndex:=0;

Prøv dette. Du kan i hvert fald ikke sige itemindex:=-1
Avatar billede bubbaa Nybegynder
15. august 2007 - 22:12 #2
hov, der skal nok stå count-1 i den første, men er ik lige sikker på om det virker :)
Avatar billede w13 Novice
15. august 2007 - 22:23 #3
Er det så ikke fuldstændig identisk med min kode? :)
Avatar billede bubbaa Nybegynder
15. august 2007 - 22:28 #4
doh, jo, jeg må være træt :)
Avatar billede w13 Novice
15. august 2007 - 22:30 #5
Det er også det, der er så mærkeligt. Jeg kan ikke rode med tallene og snyde den til at markere de rigtige felter. Den nægter simpelthen at markere første og sidste felt, når jeg gør det sådan her. =S Jeg ville bare gerne have den til ikke at stoppe, når den når op til toppen eller ned til bunden..
Avatar billede bubbaa Nybegynder
15. august 2007 - 22:37 #6
Bare for sjov så prøv lige:
else if (Key=VK_UP) and (CodeBox1.Selected[0]) then CodeBox1.ItemIndex:=(-1 + CodeBox1.Items.Count)
  else if (Key=VK_DOWN) and (CodeBox1.Selected[-1 + CodeBox1.Items.Count]) then CodeBox1.ItemIndex:=0;

Hvad får du af fejl meddelelse?
Avatar billede kroning Nybegynder
15. august 2007 - 22:37 #7
Du mangler bare at sætte Key:=0;

procedure TForm1.CodeBox1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
    if Key=VK_RETURN then
  begin
      CodeBox1DblClick(Sender);
        Key:=0;
  end
    else if (Key=VK_UP) and (CodeBox1.Selected[0]) then
  begin
      CodeBox1.ItemIndex:=CodeBox1.Items.Count-1;
    Key:=0;
  end
  else if (Key=VK_DOWN) and (CodeBox1.Selected[CodeBox1.Items.Count-1]) then
  begin
      CodeBox1.ItemIndex:=0;
        Key:=0;
    end;
end;
Avatar billede w13 Novice
15. august 2007 - 22:38 #8
Ingen. Samme resultat. Den springer bare til det næste element.
Avatar billede w13 Novice
15. august 2007 - 22:40 #9
Så virker det jo bare. Så det er på en eller anden vis, fordi den bruger en forrig Key-værdi, eller hvad?
Avatar billede kroning Nybegynder
15. august 2007 - 22:49 #10
Ja hvis du ikke sætter Key:=0 efter du f.eks. har sat CodeBox1.ItemIndex:=0; ved tryk på VK_DOWN så vil listboxen stadig modtage en VK_DOWN og derfor flytte en ned.
Avatar billede w13 Novice
15. august 2007 - 22:57 #11
Ah! :)
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