Autor Beitrag
Xearox
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 260
Erhaltene Danke: 3



BeitragVerfasst: Fr 03.06.11 13:44 
Mahlzeit zusammen,

folgendes Problem, habe mein Programm bis auf eine ganz kleine Sache, fertig.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
procedure TForm2.LB_Aus_ArtikelDblClick(Sender: TObject);
var
i: Integer;
begin
  with LB_Aus_Artikel do
  begin
    i := 0;
    while (i <= Items.Count - 1and (SelCount > 0do
      begin
        while (i <= Items.Count - 1and Selected[i] do
          Items.Delete(i);
          ArtikelAuswahl[i].Ind:='';
          ArtikelAuswahl[i].Anzahl:='';
          ArtikelAuswahl[i].Name:='';
          LB_Aus_ArtikelAnz.items.delete(i);
          inc(i);
      end;
      ArtikelAnz:=ArtikelAnz - 1;

  end;
end;


Der code soll folgendes bewirken.
Doppel klick auf einen Artikel, Artikel wird aus liste gelöscht.
Links neben der Artikelliste ist eine weitere liste, welche die Stückzahlen enthält.
Dort soll auch der Eintrag gelöscht werden. Jedoch löscht er immer mehr als er soll.
Wenn ich nun 13 Artikel in der liste habe, und lösche den 13. Artikel, dann wird links in der Stückzahlliste genau 7 Einträge rausschmissen.
Ich weiß mir leider keinen Rat mehr, woran das liegen könnte.

Weiß jemand von euch, wie ich das am besten lösen kann?

Gruß Chris
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19338
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 03.06.11 13:50 
Wenn du Einträge löschen willst, musst du von hinten anfangen oder i nur erhöhen, wenn du nicht gelöscht hast...

Überlege einmal selbst:
Du bist bei Eintrag 0, löschst den und erhöhst i. Welchen Eintrag prüfst du jetzt als nächstes? Den an Position 1... Und was ist mit dem, der jetzt an Position 0 ist?

Zudem hast du den Quelltext falsch eingerückt, da fehlt wohl ein begin..end...
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
procedure TForm2.LB_Aus_ArtikelDblClick(Sender: TObject);
var
i: Integer;
begin
  with LB_Aus_Artikel do
  begin
    i := 0;
    while (i <= Items.Count - 1and (SelCount > 0do
    begin
      while (i <= Items.Count - 1and Selected[i] do
        Items.Delete(i);
      // und hier ist die innere while Schleife zu Ende!
      ArtikelAuswahl[i].Ind:='';
      ArtikelAuswahl[i].Anzahl:='';
      ArtikelAuswahl[i].Name:='';
      LB_Aus_ArtikelAnz.items.delete(i);
      inc(i);
    end;
    ArtikelAnz:=ArtikelAnz - 1;
  end;
end;
Xearox Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 260
Erhaltene Danke: 3



BeitragVerfasst: Fr 03.06.11 13:54 
jetzt wo du es sagst, stimmt, hab ein begin vergessen und natürlich ein end;

aber dennoch funktioniert es nicht.
der löscht immer noch mehr als nur ein item...
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19338
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 03.06.11 13:59 
Ich verstehe auch den Aufwand nicht wirklich... :gruebel:

Was spricht dagegen es ganz einfach so zu machen?
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure TForm2.LB_Aus_ArtikelDblClick(Sender: TObject);
var
  CurrentIndex: Integer;
begin
  CurrentIndex := LB_Aus_Artikel.ItemIndex;
  if CurrentIndex >= 0 then
  begin
    LB_Aus_ArtikelAnz.Items.Delete(CurrentIndex);
    LB_Aus_Artikel.Items.Delete(CurrentIndex); 
    ...
  end;
end;
Xearox Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 260
Erhaltene Danke: 3



BeitragVerfasst: Fr 03.06.11 14:01 
weil ich das ausm internet hatte den code.
und ich vorher damit noch garnicht gearbeitet habe.
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Fr 03.06.11 14:03 
Moin!

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Ich verstehe auch den Aufwand nicht wirklich... :gruebel:
Er hat Multiselect aktiviert, dann kann es mehr als ein markiertes Item geben. :idea: ;)

Vorschlag:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TForm2.LB_Aus_ArtikelDblClick(Sender: TObject);
  var
    i: Integer;
begin
  for i := LB_Aus_Artikel.Count -1 downto 0 do
    if LB_Aus_Artikel.Selected[i] then begin
      LB_Aus_Artikel.Items.Delete(i); 
      LB_Aus_ArtikelAnz.Items.Delete(i);
      //... 
    end;
end;
cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19338
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 03.06.11 14:13 
Meinst du wirklich, dass er das möchte?
user profile iconXearox hat folgendes geschrieben Zum zitierten Posting springen:
Der code soll folgendes bewirken.
Doppel klick auf einen Artikel, Artikel wird aus liste gelöscht.
:zwinker:

Abgesehen davon bezweifle ich, dass bei Multiselect in OnDblClick noch andere markiert bleiben. :gruebel:
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Fr 03.06.11 14:16 
Moin!

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Meinst du wirklich, dass er das möchte?
user profile iconXearox hat folgendes geschrieben Zum zitierten Posting springen:
Der code soll folgendes bewirken.
Doppel klick auf einen Artikel, Artikel wird aus liste gelöscht.
:zwinker:
Er hatte es in dem anderen Topic geschrieben. :nixweiss:

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Abgesehen davon bezweifle ich, dass bei Multiselect in OnDblClick noch andere markiert bleiben. :gruebel:
Wenn du statt des letzten Klicks einen Doppelklick machst (mit Strg oder Shift), dann bleibt die Auswahl stehen, ja. ;) (ich gebe zu, habe ich auch erst ausprobieren müssen :oops:)

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.