15. august 2007 - 21:46Der 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.
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
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..
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;
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;
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.
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.