![]() |
Abstrakter Fehler
Hallo Leute,
ich rufe aus meinem Programm ein neues Formular auf. Im Formshow erzeuge ich einige Komponenten, unter anderem zwei Buttons. Beide Buttons haben das Ereignis OnClick. Solange ich nur einem Button ein Ereignis zuweise funktioniert alles hervorragend. Sobald ich das zweite Erreignis angebe bekomme ich den Fehler "Abstrakter Fehler".
Delphi-Quellcode:
In der Abbrechen Methode wird lediglich ein boolscher Wert geändert und "Close" aufgerufen.
for i := 1 to 2 do
begin dynButton := TButton.Create(self); with dynButton do begin parent := self; Name := 'dynButton' + inttostr(i); if i = 1 then begin caption := '&Abbrechen'; OnClick := Abbrechen; end else begin Caption := 'Datensatz &einfügen'; OnClick := Datensatz_einfuegen; end; Width := 105; Height := 25; left := posButton - ((i - 1) * 105) - ((i - 1) * 10); top := (pntPosition.Y + 1) * 50; end; end; In der Datensatz_einfuegen Methode wird ebenfalls ein boolscher Wert gesetz und "Close" aufgerufen. In FormClose werden dann alle Komponenten, auch die Buttons mittels free wieder freigegeben. Wie gesagt, solange ich nur das Abbrechen Ereignis implementiere funktioniert es. Kann mir jemand sagen warum das so ist, und wie ich das Problem behebe. Gruß Steppo |
Re: Abstrakter Fehler
Schön, dass du irrelevanten Sourcecode zeigst. :mrgreen: Entscheidend ist die Definition davon und die sehe ich nicht.
|
Re: Abstrakter Fehler
Was meinst du mit irrelevanten Sourcecode. So erstelle ich die Buttons.
Meinst du die beiden Methoden, die über das Ereignis ausgelöst werden? |
Re: Abstrakter Fehler
Zitat:
|
Re: Abstrakter Fehler
Also die, die ich bei meiner Erstellung des Threads aufgeführt habe. O.K.
Delphi-Quellcode:
Gru?ß steppo
procedure Tfrm_insertValues.Abbrechen(Sender: TObject);
begin boolABortClicked := True; Close; end; procedure Tfrm_insertValues.Datensatz_einfuegen(Sender: TObject); begin boolABortClicked := False; Close; end; |
Re: Abstrakter Fehler
Wo hast du die 2 Proceduren deklariert?
|
Re: Abstrakter Fehler
Im Abschnitt private
Delphi-Quellcode:
unit Insert;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Contnrs, StdCtrls, Mask, DBCtrls, DB; type Tfrm_insertValues = class(TForm) procedure FormShow(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); private procedure Abbrechen(Sender: TObject); procedure Datensatz_einfuegen(Sender: TObject); procedure Check_DataType(Sender: TObject); { Private-Deklarationen } public { Public-Deklarationen } end; var frm_insertValues: Tfrm_insertValues; dynOLComponents: Tobjectlist; dynEdit: TDBEdit; dynLabel: TLabel; dynButton: TButton; boolABortClicked: Boolean; implementation |
Re: Abstrakter Fehler
Du musst die dyn. erstellten Buttons nicht mehr freigeben, dadurch dass Du parent gesetzt hast, kümmert sich dieser darum, und Du gibt sie dann ein 2.Mal frei und erzeugst den Fehler!
(a) Brauchst Du die globalen Variablen? (b) Ich würde die Unit nicht Insert nennen, wenn du System.Insert o.ä. mal brauchst suchst Du schon ein Weilchen! |
Re: Abstrakter Fehler
Hallo Kroko1999,
das habe ich auch versucht. Rufe ich das Formular jedoch ein weiteres mal auf, so wird ein Fehler erzeugt, der da sagt, dass es bereits einen Button mit diesem Namen gibt. |
Re: Abstrakter Fehler
Zitat:
Gruß onlinekater |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:04 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz