Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TcxCombobox in TcxGrid Zugriff bei Items.AddObject (https://www.delphipraxis.net/66920-tcxcombobox-tcxgrid-zugriff-bei-items-addobject.html)

Janek76 6. Apr 2006 13:52


TcxCombobox in TcxGrid Zugriff bei Items.AddObject
 
Hallo! Ich habe mal folgende Frage: Ich nutze bei den DevExpress-Komponenten im cxGrid eine Combobox. Ich brauche wie in Html eine Combobox, in der ich neben dem Anzeige String (Texteigenschaft) einen Stringwert zum Speichern habe. Dazu habe ich folgende Zeile benutzt:

TcxComboBoxProperties(cxGridDBTableView1ComboBox.P roperties).Items.AddObject(String1,TObject(String2 ));


Versuche ich nun so auf diesen Wert zuzugreifen:
String(TcxComboBoxProperties(cxGridDBTableView1Com boBox.Properties).Items.Objects[i])
erhalte während der Laufzeit eine Zugriffsverletzung in Adresse soundo ntll.dll oder so oder es wird einfach nur Schrott abgespeichert. Wie macht man das richtig, bzw. was mache ich falsch?

Würde mich über eine Antwort sehr freuen,

vielen Dank!

Die Muhkuh 6. Apr 2006 13:53

Re: TcxCombobox in TcxGrid Zugriff bei Items.AddObject
 
Hi,

ntdll.dll richtig?

Wenn ja, dann könnte es das Problem sein:

http://www.delphipraxis.net/internal...ht=patch+ntdll

Janek76 6. Apr 2006 14:05

Re: TcxCombobox in TcxGrid Zugriff bei Items.AddObject
 
Hm. Danke für die Antwort. Daran liegts glaube ich nicht, jedenfalls nicht ausschließlich. Jetzt habe ich auch als Fehlermeldung Zugriffsverletzung in Adresse so und so in der compilierten Projektdatei. Irgendwas mache ich falsch. Ich kenne mich noch zu wenig mit dem Umgang mit Objekten aus. Ich weiß nicht, ob ich einfach einen String in ein Objekt und anschließend wieder in einen String zurückverwandeln kann, bzw. ob man das selbe mit einem Integerwert machen kann, bzw. ich weiß nicht wie.

Die Muhkuh 6. Apr 2006 14:10

Re: TcxCombobox in TcxGrid Zugriff bei Items.AddObject
 
Hi,

sorry ist mein Fehler. Ich hab das mit der Zugriffsverletzung übersehen. :oops:

Ich würde es so lösen:

Delphi-Quellcode:
TmyItem = class(TObject)
private
  FString2: String;
public
  property String2: String read FString2 write FString2;
end;

// dann beim abspeichern
myItem := TmyItem.Create;
myItem.String2 := String2;
TcxComboBoxProperties(cxGridDBTableView1ComboBox.Properties).Items.AddObject(String1, myItem);

// Auslesen
myItem := TMyItem(TcxComboBoxProperties(cxGridDBTableView1ComboBox.Properties).Items.Objects[i]);
Das hat den Vorteil, dass du es bei Bedarf schnell anpassen kannst (vielleicht musst du ja noch irgendwas anderes mitgeben).
Was du noch machen solltest, sind die Bezeichner anpassen (String2 ist nicht sehr aussagefreundlich)

Janek76 6. Apr 2006 14:54

Re: TcxCombobox in TcxGrid Zugriff bei Items.AddObject
 
Klasse! Vielen Dank für die Antwort. Genau das ist die Lösung. Muß noch ein bißchen darüber nachdenken, aber es funktioniert.

Janek76 6. Apr 2006 15:19

Re: TcxCombobox in TcxGrid Zugriff bei Items.AddObject
 
Achso eine Frage habe ich noch:

Kann ich mehrmals

myItem := TmyItem.Create;

hintereinander benutzen? Bzw. was passiert genau, wird jedesmal ein neues Objekt angelegt oder das alte zerstört und neu angelegt, wenn ich beides hintereinander mehrfach verwende. Bzw. wann kann ich myItem.Free und myItem.Destroy sagen?

Die Muhkuh 6. Apr 2006 15:34

Re: TcxCombobox in TcxGrid Zugriff bei Items.AddObject
 
Hi,

ja kannst du.

Zitat:

Bzw. wann kann ich myItem.Free und myItem.Destroy sagen?
z.B. wenn du die Anwendung beendest.

Delphi-Quellcode:
// Beispiel anhand der Combobox:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
  I: Integer;
begin
  for I := 0 to Combobox1.Items.Count - 1 do
  begin
    Combobox1.Items.Objects[I].Free;
  end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:17 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