Avatar billede jgthb Nybegynder
26. juli 2006 - 20:57 Der er 11 kommentarer og
1 løsning

listbox, memo, memo.clear

Hej

Jeg har en listbox og en memo, forbundet, således, at når jeg trykker på en linje i listbox1, vises en tilsvarende tekstfil i memo1. hvis jeg trykker på en ny linje, slettes teksten i memo1, og den nye tekst hentes. Men hvis jeg trykker på området under nederste linje i listbox1, tilføjes teksten, som hører til linje 1 i listbox1 til memo1, imens teksten, der er der i forvejen bliver stående. hvorfor tilføjes den linje?

procedure TForm1.ListBox1Click(Sender: TObject);
var
a: integer;
begin
memo2.Clear;
for a:=0 to listbox1.Count-1 do
begin
if listbox1.itemindex=a then
memo2.Lines.add(memo1.Lines[a]);
end;
end;
Avatar billede kroning Nybegynder
26. juli 2006 - 21:07 #1
Jeg kan ikke genskabe det problem, hvis jeg trykker i listboxen hvor der ikke er nogle linier så bliver ListBox1Click slet ikke kaldt.

Du kan evt. skære de kode ned til:

Memo2.Lines.Add(Memo1.Lines[ListBox1.ItemSelected]);

Du skriver kun om ListBox1 og Memo1 men i din kode har du også en Memo2 ?
Avatar billede kroning Nybegynder
26. juli 2006 - 21:08 #2
Rettelse, jeg mener:
Memo2.Lines.Add(Memo1.Lines[ListBox1.ItemIndex]);
Avatar billede jgthb Nybegynder
26. juli 2006 - 21:27 #3
ja. den fulde kode, kan du finde i den anden tråd: http://www.eksperten.dk/spm/722503.

tak for nedskæringen.

min beskrivelse var lidt mangelfuld. problemet opstår, når jeg trykker på memoen og derefter trykker under linjerne i listbox1.
Avatar billede jgthb Nybegynder
26. juli 2006 - 21:47 #4
jeg har fundet ud af, hvad problemet består i. det sker nemlig også, hvis jeg eksempelvis vil søge men så trykker annuller. Listbox1 opfatter handlingen som et tryk, altså onclick, og udfører så proceduren, hvor itemindex, så er 0, altså øverste linje. Men hvordan undgår jeg så det?
Avatar billede jgthb Nybegynder
26. juli 2006 - 21:50 #5
hmm. men den udfører egentlig ikke proceduren fuldstændig, fordi så ville den jo også udføre handling:
memo2.clear
Avatar billede kroning Nybegynder
26. juli 2006 - 22:04 #6
Ved at bruge debuggeren er det let at se hvad der sker.
Avatar billede jgthb Nybegynder
26. juli 2006 - 22:23 #7
jeg ved ikke lige, hvad debuggeren er. hvor finder jeg den?

i øvrigt, hvor sætter man rækkefølgen af ens komponenter, altså hvilken der skal være øverst prioriteret. hvis jeg eksempelvis i et projekt laver en memo og så derefter laver endnu en memo og putter den præcis oven i den første memo. så hvis jeg klikker der, vil jeg få fat i memo2 og ikke memo1. det kan man vel ændre
Avatar billede kroning Nybegynder
26. juli 2006 - 22:50 #8
Debuggeren er din bedste ven hvis noget ikke virker som det burde, et problem der måske ville tage 1 time at løse kan ordnes på 2 minutter med debuggeren. En kort forklaring syntes jeg ikke lige jeg kan komme med men her er lidt fra hjælpen:

No matter how careful you are when writing code, your programs are likely to contain errors, or bugs, that prevent them from running the way you intended. Debugging is the process of locating and fixing errors in your programs. The IDE provides debugging features, collectively referred to as the integrated debugger, that let you find and fix errors in your programs. The integrated debugger is a full-featured debugger that enables you to:

Control the execution of your program
    Monitor the values of variables and items in data structures
    Modify the values of data items while debugging

The integrated debugger can help you track down both runtime errors and logic errors. By running to specific program locations and viewing the state of your program at those places, you can monitor how your program behaves and find the areas where it is not behaving as you intended.

Ved at højre klikke på en komponent kan du vælge (Delphi 7) Bring to front, Send to back, der er muligvis flere muligheder i nyere Delphi versioner. Men ellers kan du jo ændre på rækkefølgen i dfm filen.
Avatar billede jgthb Nybegynder
26. juli 2006 - 23:09 #9
Jeg fandt ikke lige ud af, hvor debuggeren var, men jeg brugte Trace over. Er de to det samme? jeg fandt ud af, at den automatisk laver følgende procedure (og så åbenbart fjerner den igen):

procedure TForm1.ListBox1Enter(Sender: TObject);
begin
memo2.Lines.add(memo1.Lines[0]);
end;

jeg slettede så linjen og erstattede den med "exit;". og nu virker det fint.
Hvis debuggeren og Trace over er det samme, så tak for hjælpen. hvis ikke, så tak for inspiration. Du kan bare ligge et svar
Avatar billede kroning Nybegynder
27. juli 2006 - 00:24 #10
Ja Trace er en af funktioner i debuggeren men der er også mange andre muligheder.
Hvad du mener med "at den automatisk laver følgende procedure (og så åbenbart fjerner den igen)" har jeg absolut ingen ide om hvad betyder, men jeg er sikker på at debuggeren  ikke har noget med det at gøre.
Avatar billede jgthb Nybegynder
27. juli 2006 - 00:27 #11
jeg mener bare, at jeg kan se, når Trace bruges, at proceduren pludselig findes, men den findes ikke når programmet er afsluttet. Og jeg har i hvert fald aldrig lavet den procedure.
Avatar billede kroning Nybegynder
27. juli 2006 - 11:41 #12
Det kan ikke være sådan som du skriver, debuggeren kan ikke oprette den kode på nogen måde så den må være der i forvejen.
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