AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TListview - EAccessViolation

Ein Thema von schuetze09 · begonnen am 25. Nov 2004 · letzter Beitrag vom 26. Nov 2004
Antwort Antwort
schuetze09

Registriert seit: 3. Mär 2004
113 Beiträge
 
Delphi 2005 Architect
 
#1

TListview - EAccessViolation

  Alt 25. Nov 2004, 09:53
Hallo!

Ich habe mal wieder ein Problem. Ich hab auf meiner Form ein Listview, dem Listview habe ich zwei Columns zugeordnet.
Das Listview befülle ich mit folgender Procedure:
Delphi-Quellcode:
procedure AllUser(Listview: TListView);
var ADODataSet: TADODataSet;
    ListItem : TlistItem;
begin
  ADODataSet:= TADODataSet.Create(nil);
  ADODataSet.Connection:=DataModule_DBConnect.ADOConnection1;
  try
    ADODataSet.CommandText:='SELECT * from tbl_username order by username';
    ADODataSet.Open;
    rs:=ADODataSet.Recordset;
    Listview.Items.BeginUpdate;
    while not rs.EOF do
      begin
        ListItem:=Listview.Items.Add;
        ListItem.Caption:=VarToStr(rs.Fields['username'].Value);
        ListItem.SubItems.Add(VarToStr(rs.Fields['admin'].Value));
        rs.MoveNext;
      end;
    Listview.Items.EndUpdate;
  except
    on E:Exception do
    begin
      MDialog(E.Message, mtError, [mbOK]);
    end;
  end;
  ADODataSet.Close;
  ADODataSet.Free;
end;
Und nun mein Problem:
Wenn ich beim Listview in einem Bereich klicke wo nix ist, also keine Spalte, bekomme ich eine EAccessViolation! Wieso?
Woran liegt das? Das OnClick-Event behandle ich so:

Delphi-Quellcode:
procedure TForm_UserAnlegen.ListView1Click(Sender: TObject);
var
  i: integer;
begin
  i:=ListView1.Selected.Index;
  if ListView1.Items.Count>=0
  then begin
     Edit2.Text:=ListView1.Items[i].Caption;
     if ListView1.Items[i].SubItems[0] = '1'
       then CheckBox2.Checked:=True
       else CheckBox2.Checked:=False;
  end;
end;
So sieht die Fehlermeldung aus:
http://home.arcor.de/andre.rauls/EAccessViolation.jpg

MfG
schuetze09
  Mit Zitat antworten Zitat
der-C

Registriert seit: 29. Okt 2004
68 Beiträge
 
Delphi 6 Professional
 
#2

Re: TListview - EAccessViolation

  Alt 25. Nov 2004, 10:00
wenn du in einen leeren bereich klickst ist der index = -1
die -1 verwendest du in deinem Feld asl index und da knallts

also vorher noch überprüfen ob index <> -1 ist
  Mit Zitat antworten Zitat
Benutzerbild von Leuselator
Leuselator

Registriert seit: 18. Mär 2003
Ort: Berlin
589 Beiträge
 
Delphi 8 Architect
 
#3

Re: TListview - EAccessViolation

  Alt 25. Nov 2004, 10:04
Das sollte helfen:
Delphi-Quellcode:
procedure TForm_UserAnlegen.ListView1Click(Sender: TObject);
var
  i: integer;
begin
  i:=ListView1.Selected.Index;
  if i >= 0 then begin
    if ListView1.Items.Count>0 //wenn Count = 0 dann sind keine Items enthalten
    then begin
       Edit2.Text:=ListView1.Items[i].Caption;
       if ListView1.Items[i].SubItems.Count > 0 then begin
         if ListView1.Items[i].SubItems[0] = '1'
           then CheckBox2.Checked:=True
           else CheckBox2.Checked:=False;
       end else raise Exception.Create('Keine Subitems da!');
    end else raise Exception.Create('Keine Items da!');
  end else raise Exception.Create('Index kleiner 0!');
end;
Gruß
Tim Leuschner
Programmierer = moderner Sysiphos: stets wenn er meint, den Stein seiner Dummheit auf den Berg des Wissens gewuchtet zu haben, erblickt er einen völlig neuen Aspekt und der Dummfels poltert mit Getöse zurück ins Tal der Unwissenheit...
  Mit Zitat antworten Zitat
schuetze09

Registriert seit: 3. Mär 2004
113 Beiträge
 
Delphi 2005 Architect
 
#4

Re: TListview - EAccessViolation

  Alt 25. Nov 2004, 10:20
Hallo,

leutet mir ein, aber leider tuts nicht...
Ich habe denn kompletten Code so kopiert wie er hier ist, geht aber nicht!
Obwohl es eigentlich tun sollte...

Was soll ich machen?

MfG
schuetze09
  Mit Zitat antworten Zitat
schuetze09

Registriert seit: 3. Mär 2004
113 Beiträge
 
Delphi 2005 Architect
 
#5

Re: TListview - EAccessViolation

  Alt 25. Nov 2004, 13:11
So, habe das Problem gelöst! Ich nehme jetzt nicht das onClick-Event, sondern SelectItem!
Delphi-Quellcode:
procedure TForm_UserAnlegen.ListView1SelectItem(Sender: TObject;
  Item: TListItem; Selected: Boolean);
begin
  if Selected
  then begin
         Edit2.Text:=Item.Caption;
         if StrToInt(Item.SubItems[0]) = 0
         then CheckBox2.Checked:=False
         else CheckBox2.Checked:=True;
       end;
end;
...manchmal sieht man den Wald vor lauter Bäumen nicht...

MfG
schuetze09
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#6

Re: TListview - EAccessViolation

  Alt 25. Nov 2004, 15:56
Moin!

Das Problem im OnClick Handler was (ich frage mich wirklich wieso) keiner gesehen hat war, das Selected an sich NIL ist, wenn nichts ausgewählt ist. Da ist dann aber schlecht bei einem Nil Objekt auf die Eigenschaft Index zu zu greifen, oder?

Delphi-Quellcode:
  i: integer;
begin
  i:=ListView1.Selected.Index; // wenn Selected schon Nil ist - woher soll er sich dann Index herholen?
MfG
Muetze1
  Mit Zitat antworten Zitat
schuetze09

Registriert seit: 3. Mär 2004
113 Beiträge
 
Delphi 2005 Architect
 
#7

Re: TListview - EAccessViolation

  Alt 26. Nov 2004, 05:36
Jo, da hast du völlig recht!


MfG
schuetze09
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:14 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz