![]() |
[gelöst]ListBox Zugriffsverletzung
Hallo Forum,
ich habe mal ein kleines Problem. Ich habe mir hier aus dem Forum die beiden veränderten Klassen für die ListBox genommen, damit zwei ListBoxen parallel scrollen. Folgender Code ist da rausgekommen:
Delphi-Quellcode:
Funktioniert auch alles ganz gut. Allerdings habe ich dann das Problem, das ich von einem anderen Form, welches so erstellt wird:
unit Unit3;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, mysql; type TNoVScrolllistbox = Class( Tlistbox ) private FRef : TCustomListBox; Procedure WMNCCalcSize( Var msg: TMessage ); message WM_NCCALCSIZE; published property Reference : TCustomListBox read FRef write FRef; end; TMyListBox = class(TListBox) private FRef : TCustomListBox; procedure WMHScroll(var Message: TWMHScroll); message WM_HSCROLL; procedure WMVScroll(var Message: TWMVScroll); message WM_VSCROLL; public constructor Create(AOwner: TComponent); override; published property Reference : TCustomListBox read FRef write FRef; end; //[...] private public LBox : TNoVScrolllistbox; LBox1: TMyListBox; end; //[...] procedure TSearchfor.FormCreate(Sender: TObject); begin Randomize; LBox := TNoVScrolllistbox.Create(Self); with LBox do begin Parent := Self; Visible := true; Top := 96; Left := 0; Width := 154; Height := 244; Enabled:=False; end; Randomize; LBox1 := TMyListBox.Create(Self); with LBox1 do begin Parent := Self; Visible := true; Top := 96; Left := 154; Width := 65; Height := 244; Reference :=LBox; end; SetScrollRange(LBox.Handle, SB_VERT, 0, 0, False); end; procedure TNoVScrolllistbox.WMNCCalcSize(var msg: TMessage); var style: Integer; begin style := getWindowLong( handle, GWL_STYLE ); If (style and WS_VSCROLL) <> 0 Then SetWindowLong( handle, GWL_STYLE, style and not WS_VSCROLL ); inherited; end; procedure TSearchfor.FormDestroy(Sender: TObject); begin LBox.Free; end; constructor TMyListBox.Create(AOwner: TComponent); begin inherited; FRef := nil; end; procedure TMyListBox.WMHScroll(var Message: TWMHScroll); begin inherited; end; procedure TMyListBox.WMVScroll(var Message: TWMVScroll); begin inherited; if Assigned(FRef) then FRef.TopIndex := TopIndex; end; end.
Delphi-Quellcode:
nicht wie folgt auf die ListBoxen zugreifen kann:
procedure TSearchfor.btnshowuserClick(Sender: TObject);
begin TShowuser.Create(Self); end;
Delphi-Quellcode:
Da bekomme ich immer eine Zugriffsverletzung.
showmessage(Searchfor.LBox.Items[SearchFor.LBox.ItemIndex]);
Kann mir da jemand weiterhelfen, ich bin mit meinem Latein am Ende, ich weiß ehrlich nicht mehr weiter, rein theoretisch müsste es ja gehen. Ich hoffe, das es nicht nur ein Problem ist, welches ich übersehe :( Danke schonmal für eure Hilfe schonmal im voraus, |
AW: ListBox Zugriffsverletzung
Hallo,
erzeugst Du Deine Objekte auch? Also z.B.:
Delphi-Quellcode:
Gleiches Problem sehe ich für das Feld FRef. Du hast es zwar als TCustomListBox deklariert, solltest die CustomListBox aber auch erzeugen oder wird das Feld FRef mit einer ListBox verbunden, die Du im Form hast?
MyCustomListBox := TMyCustomListBox.Create;
Delphi-Quellcode:
Diese Variante wäre nicht sehr gut, da es sich in Deinem Form höchstwahrscheinlich dann um eine TListBox handelt, die nicht so ohne weiteres an eine TCustomListBox übergeben werden kann.
MyCustomListBox.Reference := MyFormListBox;
Andernfalls, solltest Du die FRef-Felder beim Aufruf des Konstruktors erzeugen.
Delphi-Quellcode:
Viele Grüße,
constructor TMyCustomListBox.Create;
begin inherited Create; self.FRef := TCustomListBox.Create; end; |
AW: ListBox Zugriffsverletzung
Ich erzeuge sie doch, siehe in dem FormCreate ereigniss.
Befüllt werden die auch. |
AW: ListBox Zugriffsverletzung
Entschuldige, habe ich nicht gesehen.
:?: Nochmal eine andere Frage. Du möchtest mit SearchFor.LBox.Items auf Deine CustomListBox zugreifen, diese Methode scheinst Du allerdings gar nicht in Dein Objekt eingebunden zu haben. Bist Du Dir hier sicher, das durch die With-Anweisung nicht
Delphi-Quellcode:
vom Compiler verstanden wird?
LBox1.Reference := LBox1.LBox;
Delphi-Quellcode:
with LBox1 do
begin Parent := Self; Visible := true; Top := 96; Left := 154; Width := 65; Height := 244; Reference :=LBox; end; |
AW: ListBox Zugriffsverletzung
Also, ich habe jetzt den Zugriff auf die ListBox so umgesetzt:
Delphi-Quellcode:
Allerdings das gleich eProblem :(
showmessage(Searchfor.LBox.Reference.Items[Searchfor.LBox.Reference.ItemIndex]);
|
AW: ListBox Zugriffsverletzung
Ich muss zugeben, ich habe auf diesem Gebiet bisher keine Erfahrung sammeln können und momentan auch keine IDE hier zur Vefügung.
Hast Du Daten in Deinen Listboxen hinterlegt, bzw. hast Du eine Sicherheistabfrage, die Dir zurückmeldet das es keine Einträge gibt und die Exception behandelt? Ich nehme mal an, Du hast Dich an ![]() |
AW: ListBox Zugriffsverletzung
Der beitrag ist richtig, ja.
Ich habe erstmal keine Überprüfung ob etwas ausgewählt wurde gemacht. Das wollte ich später machen. Allerdings ist die Liste befüllt und beim Klicken auf den Button zum Form erstellen, habe ich auch was ausgewählt. Ansonsten wäre es ja logisch :( |
AW: ListBox Zugriffsverletzung
Zitat:
1. Du solltest mehr Infos posten, zb was für eine Zugriffsverletzung auftritt! 2. Hast du denn mal selber durch deinen Code gesteppt, und geschaut ob es nicht an was anderem liegen könnte? Der Fehler ist meistens eine Zeile über dem von Delphi makierten. 3. Sollte das nicht der Fall sein, wirst du mehr von deinem Code posten müssen. |
AW: ListBox Zugriffsverletzung
Wieso sind LBox udn LBox1 bei Dir in einem public Bereich?
Zu welchem Object oder Form gehören sie? Momentan sieht das auf diese Weise seltsam aus. a Du aber Auslassungszeichen //[..] verwendet hast, gehe ich davon aus, dass dort noch mehr Code ist. Aber aus welchem Grund nimmst Du dafür keine globalen Variablen? Aus Sicherheistgründen? |
AW: ListBox Zugriffsverletzung
Searchfor wird schon richtig iniatialisiert?
Also im Projekt Application.CreateForm(TSearchfor , Searchfor ); oder im Code Searchfor := TSearchfor.Create(xxx) und nicht in der Art
Delphi-Quellcode:
With TSearchfor.Create(self) do ....
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:20 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