![]() |
Von Listview1 auf Listview2 zugreifen
Also ich habe ein Programm in dem links die Kalenderwochen eines Jahres eingetragen werden. (Automatisch)
Dann habe ich daneben eine andere Listview in der Namen eingetragen werden können. Nun möchte ich nur die Namen angezeigt bekommenm, die zum beispiel für die KW 33 (aktuelle) eingetragen wurden. Das heißt in der linken Listview klicke ich auf die KW und in der rechten erscheinen dann nur die Namen die auch für die KW 33 eingetragen wurden. Danke für eure Hilfe. edit: Bin zwar kein blutiger Anfänger aber bitte nicht zu kompliziert wenn es geht :) Daaaaaannkee :) |
AW: Von Listview1 auf Listview2 zugreifen
Unter der Prämisse, dass man Logik und Darstellung möglichst trennen sollte, würde ich mir eine kleine Klasse deklarieren, die eine Liste (für reine Namen würde ja eine TStringlist genügen) beinhaltet. Je KW wird nun eine Instanz dieser Klasse erstellt und in der Data-Eigenschaft des jeweiligen ListItems abgelegt. Ändert sich das aktuelle Item der ersten ListView, kann man somit flugs in dessen Data-Eigenschaft (und somit der hinterlegten Instanz der angesprochenen Klasse) nachschauen, welche Namen in dessen interner Liste vorhanden sind. Und die trägt man dann (nach vorheriger Löschung der alten Items) und der 2. Listview ein. Das klingt vielleicht etwas kompliziert, ist aber eigentlich ganz einfach.
|
AW: Von Listview1 auf Listview2 zugreifen
Ok hast du villeicht irgendeinen quelltext den du mir als beispiel geben könntest ?:)
|
AW: Von Listview1 auf Listview2 zugreifen
Ich sitze nicht mehr am Rechner, kann Dir aber morgen früh gerne ein Beispiel zusammendengeln, sofern dann noch Bedarf bestehen sollte.
|
AW: Von Listview1 auf Listview2 zugreifen
Vielen Dank :)
|
AW: Von Listview1 auf Listview2 zugreifen
Eine Frage noch: welche Delphi-Version benutzt Du? Du kannst das übrigens auch in Deinem Profil angeben, das spart künftig solche Rückfragen.
|
AW: Von Listview1 auf Listview2 zugreifen
Ich kann ja schon mal so viel verraten: Du musst herausfinden, was passiert, wenn Du in der KW-Listbox einen Eintrag auswählst. Wie kannst Du das erkennen? Welches Event des Controls kannst Du abgreifen?
In diesem Eventhandler implementierst Du dann, das die zweite Listbox nur mit den Namen gefüllt wird, die zu der ausgewählten KW passen. |
AW: Von Listview1 auf Listview2 zugreifen
mit dem selected befehel?
Und im Moment Lazarus :) |
AW: Von Listview1 auf Listview2 zugreifen
Probiere mal, bei 'Auswahl' in der linken Seite eine Message Box anzuzeigen. Also, ich wähle eine KW aus und die Msgbox kommt hoch.
|
AW: Von Listview1 auf Listview2 zugreifen
So, hier eine minimalistische Demo (vorsichtshalber in Delphi 7 ohne Generics oder dergleichen). Zunächst die Datenklasse:
Delphi-Quellcode:
Und die Oberfläche dazu:
unit TestData;
interface uses Classes; type TTest = class private FKW: Byte; FNames: TStrings; public constructor Create(AKW: Byte); destructor Destroy; override; property KW: Byte read FKW; property Names: TStrings read FNames; end; implementation { TTest } constructor TTest.Create(AKW: Byte); begin inherited Create; FKW := AKW; FNames := TStringlist.Create; end; destructor TTest.Destroy; begin FNames.Free; inherited; end; end.
Delphi-Quellcode:
unit uMain;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Contnrs, ComCtrls, TestData; type TForm1 = class(TForm) ListView1: TListView; ListView2: TListView; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure ListView1SelectItem(Sender: TObject; Item: TListItem; Selected: Boolean); private { Private-Deklarationen } FKW: TObjectList; procedure GenerateTestData; procedure DisplayKWList; procedure DisplayNames(ATest: TTest); public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} (* Anzeige der KWs aus der FKW-Liste in ListView1 *) procedure TForm1.DisplayKWList; var i: integer; Item: TListItem; Test: TTest; begin ListView1.Items.BeginUpdate; try ListView1.Items.Clear; for i := 0 to FKW.Count - 1 do begin Item := ListView1.Items.Add; Test := FKW[i] as TTest; Item.Caption := IntToStr(Test.KW); (* Anhängen der Instanz an den Listeneintrag *) Item.Data := Test; end; finally ListView1.Items.EndUpdate; end; end; (* Anzeige der Namen zur übergebenen KW in ListView2 *) procedure TForm1.DisplayNames(ATest: TTest); var i: integer; Item: TListItem; begin ListView2.Items.BeginUpdate; try ListView2.Items.Clear; for i := 0 to ATest.Names.Count - 1 do begin Item := ListView2.Items.Add; Item.Caption := ATest.Names[i]; end; finally ListView2.Items.EndUpdate; end; end; procedure TForm1.FormCreate(Sender: TObject); begin FKW := TObjectList.Create; GenerateTestData; DisplayKWList; end; procedure TForm1.FormDestroy(Sender: TObject); begin FKW.Free; end; procedure TForm1.GenerateTestData; var Data: TTest; begin Data := TTest.Create(1); Data.Names.Add('Heinz'); Data.Names.Add('Hans'); Data.Names.Add('August'); FKW.Add(Data); Data := TTest.Create(2); Data.Names.Add('Fritz'); Data.Names.Add('Sabine'); Data.Names.Add('Eleonore'); FKW.Add(Data); Data := TTest.Create(3); Data.Names.Add('Victor'); Data.Names.Add('Kunigunde'); Data.Names.Add('Klaus-Bärbel'); FKW.Add(Data); end; (* Bei Auswahl einer KW deren Daten anzeigen *) procedure TForm1.ListView1SelectItem(Sender: TObject; Item: TListItem; Selected: Boolean); var Test: TTest; begin if Selected then begin Test := TTest(Item.Data); if Assigned(Test) then DisplayNames(Test); end; end; end. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:27 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 by Thomas Breitkreuz