AGB  ·  Datenschutz  ·  Impressum  







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

listview on change problem

Ein Thema von Wadim · begonnen am 11. Feb 2006 · letzter Beitrag vom 11. Feb 2006
Antwort Antwort
Wadim

Registriert seit: 31. Aug 2003
185 Beiträge
 
#1

listview on change problem

  Alt 11. Feb 2006, 19:00
hi leute,

ich hab ein dickes problem und zwar hab ich folgendes vor...hier mal zuerst mein beispiel quellocode:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var eintrag: tlistitem;
begin
eintrag:= listview1.Items.Add;
eintrag.Caption := 'ok';
eintrag.SubItems.Add('geht');
end;
Delphi-Quellcode:
procedure TForm1.ListView1Change(Sender: TObject; Item: TListItem;
  Change: TItemChange);
begin
label1.Caption := listview1.Items.Item[0].SubItems.strings[0];
end;
so nun wenn ich auf den button klicke bekomme ich sofort eine fehlermeldung das der listindex überschritten ist...zuerst hab ich mich gefragt wie das zustande kommt aber inzwischen hab ich das problem gefunden, und zwar sobald der den eintrag 'ok' einfügt beginnt der sofort mit dem onchange ereigniss, und weil ja beim subitem [0] noch kein eintrag vorhanden ist gibt der mir ein error aus

so nun zu meiner frage...gibts irgendwie ein befehl das der den onchange erst ausführt sobald die erste zeile vollständig ausgefüllt ist??

hab auch schon mit dieser variante probiert jedoch logischerweise der selbe fehler

Delphi-Quellcode:
if listview1.Items.Item[0].SubItems.strings[0] <> 'then
  begin
   //quelltext
  end;
kann mir evtl. jemand helfen??

mfg wadim
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: listview on change problem

  Alt 11. Feb 2006, 19:08
Moin Wadim,

statt den Inhalt des SubItems[0] zu prüfen, solltest Du prüfen, ob SubItems.Count > 0 ist.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
sir-archimedes

Registriert seit: 2. Jan 2006
Ort: Münster
167 Beiträge
 
Delphi 2006 Professional
 
#3

Re: listview on change problem

  Alt 11. Feb 2006, 19:44
Noch ein Tipp:

Probiere mal

ListView.Items.BeginUpdate;
...
ListView.Items.EndUpdate;

Das sollte dein Problem lösen!

Gruß
  Mit Zitat antworten Zitat
Wadim

Registriert seit: 31. Aug 2003
185 Beiträge
 
#4

Re: listview on change problem

  Alt 11. Feb 2006, 20:47
danke für eure hilfe aber irgendwie hat es nicht so geklappt wie ich es wollte, zwar hat er kein error mehr rausgegen aber der hat danach den eintrag nicht bearbeitet...erst wenn ein zweiter eintrag hinzugekommen ist...naja egal, ich hab das problem anders gelöst, und zwar hab ich zuerst die subitems hinzugefügt und am ende caption...jetzt geht es wunderbar

hier nochmal der veränderte quelltext:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var eintrag: tlistitem;
begin
eintrag:= listview1.Items.Add;
eintrag.SubItems.Add('geht');
eintrag.Caption := 'ok';
end;
danke nochmal

mfg wadim
  Mit Zitat antworten Zitat
sir-archimedes

Registriert seit: 2. Jan 2006
Ort: Münster
167 Beiträge
 
Delphi 2006 Professional
 
#5

Re: listview on change problem

  Alt 11. Feb 2006, 21:25
Also eigentlich klappt das mit BeginUpdate und EndUpdate immer ziemlich gut: du musst zwischen diesen beiden Methodenaufrufen alles machen. Wenn du anschließend EndUpdate aufgerufen hast, musst du "von Hand" noch das OnChange-Ereignis anstoßen.

Begin/EndUpdate sorgen auf jeden Fall dafür, dass nicht ständig "störende" OnChange-Ereignisse aufgerufen werden und dass nicht die ganze Zeit die Komponente neu gezeichnet wird - denn das kostet Zeit und flackert.
  Mit Zitat antworten Zitat
Wadim

Registriert seit: 31. Aug 2003
185 Beiträge
 
#6

Re: listview on change problem

  Alt 11. Feb 2006, 21:51
Zitat von dominik.boehm:
Also eigentlich klappt das mit BeginUpdate und EndUpdate immer ziemlich gut: du musst zwischen diesen beiden Methodenaufrufen alles machen. Wenn du anschließend EndUpdate aufgerufen hast, musst du "von Hand" noch das OnChange-Ereignis anstoßen.

Begin/EndUpdate sorgen auf jeden Fall dafür, dass nicht ständig "störende" OnChange-Ereignisse aufgerufen werden und dass nicht die ganze Zeit die Komponente neu gezeichnet wird - denn das kostet Zeit und flackert.
kannst du es evtl. bisschen genauer beschreiben mit einem beispiel...versteh das irgendwie nicht ganz...bin hier am probieren mit deiner metohde aber irgendwie immer wieder der selbe fehler :/

mfg wadim
  Mit Zitat antworten Zitat
sir-archimedes

Registriert seit: 2. Jan 2006
Ort: Münster
167 Beiträge
 
Delphi 2006 Professional
 
#7

Re: listview on change problem

  Alt 11. Feb 2006, 22:59
So, habe das selber jetzt mal getestet (Test in D5) und herausbekommen, dass das, was ich vorgeschlagen habe hier wohl doch nicht funktioniert. Den Fehler will ich wieder gutmachen, also ein kleiner Workaround

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ComCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    ListView1: TListView;
    Button1: TButton;
    Label1: TLabel;
    procedure ListView1Change(Sender: TObject; Item: TListItem;
      Change: TItemChange);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
    ListViewInUpdate : Boolean;
    procedure UpdateLabel;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.ListView1Change(Sender: TObject; Item: TListItem;
  Change: TItemChange);
begin
  if not ListViewInUpdate then
     UpdateLabel;
end;

procedure TForm1.UpdateLabel;
begin
  if (ListView1.Items.Count > 0) AND
     (ListView1.Items.Item[0].SubItems.Count > 0) then
   Label1.Caption := ListView1.Items.Item[0].SubItems.strings[0];
end;


procedure TForm1.Button1Click(Sender: TObject);
var Eintrag : TListItem;
begin
  ListViewInUpdate := true;
  Eintrag := ListView1.Items.Add;
  Eintrag.Caption := 'ok';
  Eintrag.SubItems.Add('geht');
  ListViewInUpdate := false;
  UpdateLabel;
end;

end.
Viele Grüße
  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 11:27 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