![]() |
AW: TObjectList sehr anfällig?
Zitat:
|
AW: TObjectList sehr anfällig?
Scheinbar hat hier oButton.Num nichts mit dem Index in der TObjectlist zu tun.
Ursache kann z.B. sein, das die Buttons nicht vollständig, doppelt oder nicht in der richtigen Reihenfolge eingefügt oder nach dem Einfügen nicht sortiert werden. Also sollte man den Index unberücksichtigt lassen, statt dessen nach dem richtigen Button suchen:
Delphi-Quellcode:
Wichtig ist:
type
TMyColButtons = class(TObjectList) private function GetButton(ANum: Integer): TClsButtonInfo; public procedure Add(AButton: TClsButtonInfo); procedure Remove(ANum: Integer); property Button[ANum: Integer]: TClsButtonInfo read GetButton; default; end; function TMyColButtons.GetButton(ANum: Integer): TClsButtonInfo; var i: Integer; begin for i := 0 to Count - 1 do begin Result := TClsButtonInfo(Items[i]); if Result.Num = ANum then Exit; end; Result := nil; end; procedure TMyColButtons.Add(AButton: TClsButtonInfo); begin Remove(AButton.Num); inherited Add(AButton); end; procedure TMyColButtons.Remove(ANum: Integer); var oButton: TClsButtonInfo; begin oButton := Button[ANum]; if Assigned(oButton) then inherited Remove(oButton); end; Wenn ein Button gelöscht werden soll, muss er aus der Liste entfernt werden, bevor er freigegeben wird. |
AW: TObjectList sehr anfällig?
Ahh hab diesbezüglich auch schon Fehler gefunden.
Beim klick auf einen Button werden mir nur ungerade Button korrekt zurückgeliefert. Vielleicht behebt dein Code das problem direkt mit. Werde es mal testen. PS: Ja leider geht nicht alles da VBCollection doch anderes gehandhabt werden. Danke. gruss |
AW: TObjectList sehr anfällig?
Hab mir deinen Code nochmal durchgesehen er hilft mir leider nicht weiter
Trotzdem nochmal Danke. Zitat:
Die gesamten eigenschaften der Classen oder nur der Index des aktuell addierten Button. gruss |
AW: TObjectList sehr anfällig?
In einer TObjectList werden die Instanzen abgelegt, Du hast also vollen Zugriff auf alle Eigenschaften und Methoden der jeweiligen Instanz. Wenn es sich nicht um eine spezialisierte Ableitung bzw. eine generische TObjectList handelt, musst Du diese aber vorher noch auf den entsprechenden Typen casten.
|
AW: TObjectList sehr anfällig?
Zitat:
oButton.Num oButton.BmpFile oButton.ButtonKey oButton.ToolTip oButton.ButtonCmd beispiel für button 1 im feld 0 gespeichert sein? Also der Counter macht mir ärger. Der dritte button wird einfach nicht addiert in die ObjectList
Delphi-Quellcode:
Die ersten beiden werden ordnungsgemäß addiert
if Btn > FColButtons.Count - 1 then
begin try oButton := TClsButtonInfo.Create(nil); oButton.Num := Btn; AddButton(oButton); finally oButton := nil; end; end; aber beim dritten ist der Count immer noch 2 obwohl er eigentlich 3 sein müßte. Die probleme nehmen einfach kein ende mit der Liste ;) Sternchen für OK! 1*, 2* 3, 4*, 5, 6*, 7, 8* Was ist mit den anderen die werden einfach nicht addiert. Der FColButtons.Count erhöht sich nicht nach dem addieren des 2,4,6 usw.. gruss |
AW: TObjectList sehr anfällig?
Wofür braucht du überhaupt die Property "Num"? Die erscheint mir eher redundant, und gerade wenn sie mit dem Index in der Liste immer übereinstimmen muss, auch aufwändig zu pflegen (Man müsste nach jedem Insert in die Liste ggf. alle Buttons anpassen).
Soweit ich deinen (zugegebenermaßen recht eigentümlichen) Code verstehe, willst du doch nicht mehr, als einfach alle Buttons in eine ungeordnete Sammlug werfen. Dann kannst du die doch einfach in die Liste Adden, der Index (also "Num") ergibt sich dann ohnehin nachher implizit über seine Position in der Liste. Warum das gehuddel? Eine Liste speichert ansonten immer auch nur Referenzen auf Objekte.
Delphi-Quellcode:
var
myInstance: TMyClass; aList: TObjectList; begin aList := TObjectList.Create; myInstance := TMyClass.Create; aList.Add(myInstance); // Folgende Zugriffe sind dann vollständig identisch: myInstance.SomeProperty := 'Foo'; TMyClass(aList[0]).SomeProperty := 'Foo'; end; |
AW: TObjectList sehr anfällig?
Darf ich mal ganz doof fragen, was Btn eigentlich ist bzw. welchen Zweck sie erfüllen soll?
|
AW: TObjectList sehr anfällig?
Zitat:
Und ist der index des aktuellen Button. gruss |
AW: TObjectList sehr anfällig?
Also wenn das eine Instanz ist, könntest Du mit IndexOf(Btn) den Index erfragen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:50 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-2025 by Thomas Breitkreuz