AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Prism MDI Anwendung: Auflistung der Children in einer Listbox
Thema durchsuchen
Ansicht
Themen-Optionen

MDI Anwendung: Auflistung der Children in einer Listbox

Ein Thema von Alexander · begonnen am 19. Mai 2006 · letzter Beitrag vom 25. Mai 2006
Antwort Antwort
Seite 1 von 2  1 2      
Alexander

Registriert seit: 28. Aug 2002
Ort: Oldenburg
3.513 Beiträge
 
Turbo Delphi für .NET
 
#1

MDI Anwendung: Auflistung der Children in einer Listbox

  Alt 19. Mai 2006, 19:55
Hallo,
auch wenn ich hier schon einige Zeit Delphi 8 & 2005 liegen habe, fange ich jetzt erst mein erstes großes .NET Projekt an .
Die MDI Anwendung selber (das Grundgerüst) habe ich quasi schon. Nur an einer Sache scheitere ich gerade:
Es können verschiedene Dateien geladen und in einem Editor-Fenster in einem Child angezeigt werden. Alle Children sollen in einer Listbox und vielleicht auch noch in einem Tabcontrol aufgelistet werden.
Das klappt auch theoretisch. Jedoch möchte ich nur den Dateinamen (nicht den ganzen Pfad) in der Box anzeigen. Das Problem dabei ist dass ja theoretisch 2 oder mehr gleichnamige Dateien in verschiedenen Dateien auftreten können. Da ich anhand des angezeigten Namens das passende Child suche, ist das ganze nicht eindeutig, es kann also auf einen Dateinamen mehrere Children kommen.
Wie könnte man das Problem elegant umgehen?

Mein Source zum Anzeigen des Fensters (LB_Dok ist die Listbox, in der die Children aufgelistet werden):
Delphi-Quellcode:
  for i:=0 to Length(Self.MdiChildren)-1 do
    if (Self.MdiChildren[i] is TMDIChild) then
    begin
      if (TMDIChild(Self.MdiChildren[i]).Text = LB_Dok.SelectedItem.ToString) then
      begin
        TMDIChild(Self.MdiChildren[i]).BringToFront;
        break;
      end;
    end;
Eine Idee wäre ja, irgendwie in der Listbox Pfad und Titel zu "speichern".
Aber wie bekommt man das hin?
Ich freue mich schon auf eure Ideen und Lösungsansätze
Alexander
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#2

Re: MDI Anwendung: Auflistung der Children in einer Listbox

  Alt 19. Mai 2006, 20:56
Ich hatte ein ähnliches Problem vor kurzem auch, mit .NET 2.0 zwar, aber soviel sollte da nicht anders sein. Und zwar kannst du in einer Listbox nicht nur Strings, sondern beliebige Objekte speichern
Entweder machst du dir also dafür ne Klasse, deren ToString-Methode genau die Anzeige liefert, die du willst, oder du speicherst direkt deine Fenster da drin und zeichnest die Listbox-Items per Ownerdraw.
Bei den "größeren" Listenelementen, also ListView und TreeView, bieten die jeweiligen Itemklassen ein Data- bzw. Tag-Member an, in dem man sowas speichern kann.
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
Alexander

Registriert seit: 28. Aug 2002
Ort: Oldenburg
3.513 Beiträge
 
Turbo Delphi für .NET
 
#3

Re: MDI Anwendung: Auflistung der Children in einer Listbox

  Alt 20. Mai 2006, 17:15
Hi,
vielen Dank. Die Tag Eigenschaft habe ich auch gesucht gehabt. Aber die gibt es ja scheinbar nur bei der Listbox. Aber das mit der Klasse hört sich gut an oder ich nehme wirklich die Listview. Wäre vielleicht gar nicht so schlecht
Alexander
  Mit Zitat antworten Zitat
Alexander

Registriert seit: 28. Aug 2002
Ort: Oldenburg
3.513 Beiträge
 
Turbo Delphi für .NET
 
#4

Re: MDI Anwendung: Auflistung der Children in einer Listbox

  Alt 20. Mai 2006, 19:06
So ich habe es gerade mal mit der Tag Eigenschaft der Listview probiert. Das klappt wunderbar.
Aber ich habe gerade noch ein Problem. Da es auch noch zu dem Titel meines Threads passt, poste ich es mal hier:
Also wenn ich ein Child schließe, muss das Items ja auch wieder entfernt werden. Also habe ganz einfach im Closing-Event des Fensters eine Methode im Hauptfenster aufgerufen mit:
  TMainFrm(owner).ChildClose(Self.text, Self.path); Das scheint problemlos zu klappen. Wenn ich jetzt aber in dieser Methode auf die Listview zu greife, bekomme ich die folgende Zugriffsverletzung um die Ohren geworfen:
Zitat:
Projekt SQLEdit.exe traf auf die unhandelte Exception-Klasse System.NullReferenceException mit der Meldung 'Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.'.
Mein Source:
Delphi-Quellcode:
  public
    procedure ChildClose(t, p : String);

[...]
procedure TMainFrm.ChildClose(t, p : String);
var
  i : Integer;
begin
  // Child aus Listbox entfernen
  for i:=0 to LView_Dok.Items.Count -1 do
    if (LView_Dok.Items.Item[i].Text.Equals(t) and LView_Dok.Items.Item[i].Tag.Equals(p)) then
    begin
      LView_Dok.Items.RemoveAt(i);
      break;
    end;
end;
Irgendwie komme ich damit nicht weiter. Bei Delphi mit Win32 habe ich das eigentlich öfters so gemacht
Alexander
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#5

Re: MDI Anwendung: Auflistung der Children in einer Listbox

  Alt 20. Mai 2006, 22:40
Naja, was genau ist null? Das muss dir dein Debugger erstmal verraten, bevor man hier blind rät
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
Alexander

Registriert seit: 28. Aug 2002
Ort: Oldenburg
3.513 Beiträge
 
Turbo Delphi für .NET
 
#6

Re: MDI Anwendung: Auflistung der Children in einer Listbox

  Alt 21. Mai 2006, 12:54
Das ist eine gute Frage. So bald ich auf die Listview zu greife, knallt es. Self ist null, er scheint also das gesamte Form verloren zu haben . Vielleicht rufe ich die Methode einfach falsch auf (also vom child aus)?
Alexander
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#7

Re: MDI Anwendung: Auflistung der Children in einer Listbox

  Alt 22. Mai 2006, 11:51
Naja, ich weiß es nicht, wie machst du denn den Aufruf?
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
Alexander

Registriert seit: 28. Aug 2002
Ort: Oldenburg
3.513 Beiträge
 
Turbo Delphi für .NET
 
#8

Re: MDI Anwendung: Auflistung der Children in einer Listbox

  Alt 22. Mai 2006, 12:30
Hatte ich oben schon geschrieben:
Delphi-Quellcode:
procedure TMDIChild.TMDIChild_Closing(sender: System.Object; e: System.ComponentModel.CancelEventArgs);
begin
  TMainFrm(owner).ChildClose(Self.text, Self.path);
end;
Alexander
  Mit Zitat antworten Zitat
Alexander

Registriert seit: 28. Aug 2002
Ort: Oldenburg
3.513 Beiträge
 
Turbo Delphi für .NET
 
#9

Re: MDI Anwendung: Auflistung der Children in einer Listbox

  Alt 24. Mai 2006, 10:58
Keiner eine Idee? Schade .
Was ich aber durch Zufall herausgefunden habe, ist dass das MainMenu diese Auflistung automatisch verwalten kann. Man muss nur MDIList des entsprechenden MainMenu Items auf true setzen und schon wird das alles automatisch gemacht. Sehr nett .

Dennoch möchte ich das wohl auch gerne in der Listviw angezeigt haben bzw. beim Schließen des Fensters auch wieder vernünftig entfernt haben
Alexander
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#10

Re: MDI Anwendung: Auflistung der Children in einer Listbox

  Alt 24. Mai 2006, 14:48
Zitat von Alexander:
Das ist eine gute Frage. So bald ich auf die Listview zu greife, knallt es. Self ist null, er scheint also das gesamte Form verloren zu haben .
Dann ist wohl "owner" nil, das solltest du mal überprüfen.
Aber wie OregonGhost schon sagte, es geht mit Objekten viel leichter, Stringvergleiche fallen komplett weg.
Beispiel:
Delphi-Quellcode:
listBox1.Add(new Form2('C:\foo\bar.txt'));

[...]

Form2 = class(Form)
private
  path: String;
public
  property FileName: string read Path.GetFileName(path);
end;
  
[...]

listBox1.Remove(myClosedForm);
In den Properties der ListBox1 noch DisplayMember = "FileName" einstellen, fertig.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 06:05 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