[Erledigt] Seltsames Verhalten mit MessageDlg und Objekt

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut

[Erledigt] Seltsames Verhalten mit MessageDlg und Objekt

Beitragvon MacWomble » 1. Feb 2019, 11:01 [Erledigt] Seltsames Verhalten mit MessageDlg und Objekt

Code: Alles auswählen
  idx := GetArtikelIndex;
  if idx < 0 then               // idx hat den richtigen Wert
    exit;
  A := ArtikelListe[idx];   
 
// A hat den richtigen Inhalt
 
  // wenn die folgende Zeile ausgeklammert ist, funktioniert es wie gewünscht !
  if MessageDlg('Diesen Artikel wirklich löschen?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
 
  begin
 
// hier hat A einen anderen Inhalt --- Warum?
// Anm. A hat nun den Inhalt des letzten Artikels in der Artikelliste.
 
    ArtikelListe.DeleteByID(A.ID);
    ArtikelListe.Delete(idx);             // idx noch immer richtig !
    dgArtikel.RowCount := dgArtikel.RowCount - 1;
    if idx >= ArtikelListe.Count then
      idx := ArtikelListe.Count - 1;
    dgArtikel.Row := dgArtikel.FixedRows + idx;
    dgArtikel.Invalidate;
  end;                                         
 


Mir ist schon klar, dass ich die Zeilen einfach nach unten ziehen kann, aber das Verhalten ist seltsam.
Ist dies irgendwie erklärbar?
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.
MacWomble
Lazarusforum e. V.
 
Beiträge: 795
Registriert: 17. Apr 2008, 00:59
Wohnort: Freiburg
OS, Lazarus, FPC: Mint 19.1 Cinnamon / CodeTyphon LAB Version 6.90 / FP 3.3.1 Rev 42237 | 
CPU-Target: Intel i7 64/32 Bit
Nach oben

Beitragvon MacWomble » 1. Feb 2019, 11:24 Re: [Erledigt] Seltsames Verhalten mit MessageDlg und Objekt

Manchmal fällt einem kurz nach dem Posten auf, woran es liegen könnte:
Code: Alles auswählen
  idx := GetArtikelIndex;
  if idx < 0 then               // idx hat den richtigen Wert
    exit;
   // Durch den Aufrufe des Dialogs wird das Grid neu gezeichnet und A neu zugewiesen  :oops:
   // A ist zu öffentlich definiert ...
   if MessageDlg('Diesen Artikel wirklich löschen?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
  begin
    A := ArtikelListe[idx]// Die Zuweisung MUSS hier stattfinden ! 
    ArtikelListe.DeleteByID(A.ID);
    ArtikelListe.Delete(idx);             // idx noch immer richtig !
    dgArtikel.RowCount := dgArtikel.RowCount - 1;
    if idx >= ArtikelListe.Count then
      idx := ArtikelListe.Count - 1;
    dgArtikel.Row := dgArtikel.FixedRows + idx;
    dgArtikel.Invalidate;
  end;                                         
 
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.
MacWomble
Lazarusforum e. V.
 
Beiträge: 795
Registriert: 17. Apr 2008, 00:59
Wohnort: Freiburg
OS, Lazarus, FPC: Mint 19.1 Cinnamon / CodeTyphon LAB Version 6.90 / FP 3.3.1 Rev 42237 | 
CPU-Target: Intel i7 64/32 Bit
Nach oben

• Themenende •

Zurück zu Freepascal



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste

porpoises-institution
accuracy-worried