AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi ListBox Eingabe mit Bezug auf vorheriges ListBox
Thema durchsuchen
Ansicht
Themen-Optionen

ListBox Eingabe mit Bezug auf vorheriges ListBox

Ein Thema von Sanni13 · begonnen am 25. Dez 2015 · letzter Beitrag vom 30. Dez 2015
Antwort Antwort
Seite 1 von 2  1 2      
Sanni13
(Gast)

n/a Beiträge
 
#1

ListBox Eingabe mit Bezug auf vorheriges ListBox

  Alt 25. Dez 2015, 14:01
Hallo,
ich möchte mehrere Listboxen mit Bezug aufeinander nutzen. Die erste Listbox soll die Auswahl a oder b haben. Bei der zweiten sollen, abhängig ob a oder b in Listbox1 gewählt wurde, verschiedene Auswahlmöglichkeiten angezeigt werden. Soweit funktioniert es. Ich kann dann aber die Auswahlmöglichkeiten in Listbox2 nicht anklicken. Es soll danach noch eine dritte Listbox geben welche sich auf die Auswahl der zweiten bezieht. Wie lässt es sich lösen, dass ich die zweite Listbox zwar anklicken aber nichts auswählen kann?
Außerdem zeigt mir das Programm bei der Ausführung eine System-Fehlermeldung "out of bound" an, wenn ich Listbox2 anwähle bevor ich eine Auswahl in ListBox1 treffe. Lässt sich diese Meldung ausschalten?

Vielen Dank im Voraus und schöne Feiertage =)

Hier mein Quelltext:

Delphi-Quellcode:
procedure ListBox2Click(Sender: TObject);
var x:String;
begin
 x:= Listbox1.Items[ListBox1.Itemindex] ;
if ListBox1.ItemIndex >=0 then
 begin
 if x='athen
   begin
   ListBox2.Items.Clear;
   ListBox2.Items.Add('a1');
   ListBox2.Items.Add('a2');
   end
  else if x='bthen
    begin
    ListBox2.Items.Clear;
    ListBox2.Items.Add('b1');
    ListBox2.Items.Add('b2');
    end
  end
else ShowMessage('Bitte Wert aus Liste1 auswählen');
end;

procedure ListBox3Click(Sender: TObject);
var y:String;
 begin
if ListBox2.ItemIndex >=0 then
 begin
 y:= Listbox2.Items[ListBox2.Itemindex] ;
 if y='a1then
  begin
  ListBox3.Items.Clear;
  ListBox3.Items.Add('a11');
  ListBox3.Items.Add('a12');
  end
 else if y='b2then
   begin
   ListBox3.Items.Clear;
   ListBox3.Items.Add('b21');
   ListBox3.Items.Add('b22');
   end
 else if y='a2or 'b1then
   ListBox4.Items.Clear;
 end
else ShowMessage('Bitte Wert aus Liste2 auswählen');
end;

Geändert von mkinzler (27. Dez 2015 um 12:42 Uhr) Grund: Delphi-Tag eingefügt
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.041 Beiträge
 
Delphi XE2 Professional
 
#2

AW: ListBox Eingabe mit Bezug auf vorheriges ListBox

  Alt 25. Dez 2015, 15:01
Hallo,
Außerdem zeigt mir das Programm bei der Ausführung eine System-Fehlermeldung "out of bound" an, wenn ich Listbox2 anwähle bevor ich eine Auswahl in ListBox1 treffe. Lässt sich diese Meldung ausschalten?
Ja, indem du erst dann auf Listbox1.Items[ListBox1.Itemindex] zugreifst, wenn geprüft ist, dass ListBox1.Itemindex>=0 ist.
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#3

AW: ListBox Eingabe mit Bezug auf vorheriges ListBox

  Alt 25. Dez 2015, 15:26
Hallo, ich möchte mehrere Listboxen mit Bezug aufeinander nutzen.
Herzlich willkommen in der Delphipraxis.

Was du beschreibst, läßt in meiner Vorsellung einen Baum entstehen, der an jedem Ast eine bestimmte Anzahl Zweige aufweist und an jedem Zweig eine bestimme Anzahl Blätter hat. Falls ich das richtig interpretiere, wäre womöglich eine Treeview-Komponente besser zur Darstellung geeignet.

Ich hab mal in einem einfachen Datenbank-Manager etwas ähnliches mit Listboxen entwickelt: In der ersten Listbox befanden sich die verfügbaren Datenbanken, die im Programm registriert waren. Je nach Auswahl von List_DB wurde in List_Tabellen eine andere Auswahl an Tabellen angezeigt. Abhängig von List_Tabellen war dann die Anzeige in Listbox3, die ich List_Felder nannte und die, wenig überraschend, die verfügbaren Felder der ausgewählten Tabelle angezeigt hat. Dabei mußte ich dafür sorgen, daß die Listboxen entweder beim Programmstart bereits mit den entsprechenden Daten befüllt wurden, also sozusagen eine Ausgangsstellung herstellen, oder aber entsprechende Bedingungen in die OnChange-Ereignisbehandlung eingebaut wurden, die verhinderten, daß in Listboxen, die noch nicht befüllt wurden (Count=0), ein nicht vorhandener Index angewählt wurde. Und genau das besagt die von dir gepostete Fehlermeldung out of bound: Der Index des angeforderten Eintrags liegt außerhalb der verfügbaren Indexmenge.

Fast vergessen: Wenn du deinen Quellcode vor dem Posten mit der Maus markierst und dann den Button mit dem Delphi-Helm drückst, wird der Code in die sog. Delphi-Tags eingebettet, wodurch die Formatierung erhalten bleibt und das Lesen deines Codes angenehmer wird.

Geändert von Perlsau (25. Dez 2015 um 15:29 Uhr) Grund: Fast vergessen
  Mit Zitat antworten Zitat
Sanni13
(Gast)

n/a Beiträge
 
#4

AW: ListBox Eingabe mit Bezug auf vorheriges ListBox

  Alt 27. Dez 2015, 12:23
Vielen Dank für die Antworten!
Die Fehlermeldung out of bound konnte ich beheben =)

Leider kann ich in meinem Projekt die TreeView-Komponente nicht nutzen, wegen der späteren Verarbeitung. Deshalb benötige ich diese Listboxen. Mittlerweile sehe ich auch warum es nicht funktioniert, da ich die Abfrage auf das Ereignis onklick beziehe, wird immer die Abfrage gemacht, ich kann aber nicht die eingetragenen Werte auswählen. Gibt es dafür einen Befehl?

PS: Den Tipp mit dem Delphihelm ist gemerkt!
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#5

AW: ListBox Eingabe mit Bezug auf vorheriges ListBox

  Alt 27. Dez 2015, 13:15
Sorry, ich hab keinen blassen Schimmer, wovon du hier schreibst
  Mit Zitat antworten Zitat
Sanni13
(Gast)

n/a Beiträge
 
#6

AW: ListBox Eingabe mit Bezug auf vorheriges ListBox

  Alt 27. Dez 2015, 14:22
Naja sobald ich auf meine Listbox2 klicke, wird geschaut, was in der Listbox1 angeklickt wurde und dementsprechend in die Listbox2 die Auswahlmöglichkeiten geschrieben. Jetzt müsste ich diese anklicken können, das geht aber nicht, da es dann wieder die eben beschriebene Abfrage macht.

Habe aber eben die Lösung dafür gefunden, anstelle von dem Ereignis OnClick muss ich OnEnd nutzen. Jetzt läufts wie es soll

Vielen Dank für die Hilfe!
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#7

AW: ListBox Eingabe mit Bezug auf vorheriges ListBox

  Alt 27. Dez 2015, 14:47
TListBox.OnEnd ist mir noch nicht über den Weg gelaufen, ich kenne lediglich TListBox.OnEndDrag und TListBox.OnEndDock. Hat aber mit deinem Problem nichts zu tun.

Wieso reagierst du nicht einfach auf eine Änderung des Eingrags in Listbox1 mit dem Einlesen in Listbox2? Und um unnötiges Einlesen zu vermeiden (es gibt kein OnChange in TListBox, ein Klick muß nicht zangsläufig den ItemIndex ändern), fragst du vor dem Einlesen in Listbox2, also im OnClick von Listbox1 ab, ob sich der ItemIndex geändert hat:

Delphi-Quellcode:
...
Private
  Var
    Idx_ListBox1,
    Idx_ListBox2 : Integer;
...
Implementation

Procedure TForm1.ListBox1Click(Sender: TObject);
begin
  If ListBox1.ItemIndex = Idx_ListBox1 Then Exit;
  Idx_ListBox1 := ListBox1.ItemIndex;
  Einlesen_ListBox2;
end;
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: ListBox Eingabe mit Bezug auf vorheriges ListBox

  Alt 27. Dez 2015, 14:50
Ich würde beim Klicken in ListBox1 die Werte in der ListBox2 setzen, denn ab dem Zeitpunkt ist klar, was in ListBox2 stehen muss.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.297 Beiträge
 
Delphi 12 Athens
 
#9

AW: ListBox Eingabe mit Bezug auf vorheriges ListBox

  Alt 27. Dez 2015, 17:48
Moin...
Zitat:
Leider kann ich in meinem Projekt die TreeView-Komponente nicht nutzen, wegen der späteren Verarbeitung.
...das riecht ganz stark nach Datenhaltung in den Controls. Der Anzeige sollte es egal sein wie die Daten vorgehalten werden...und umgekehrt.
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#10

AW: ListBox Eingabe mit Bezug auf vorheriges ListBox

  Alt 28. Dez 2015, 07:17
Meiner Ansicht nach lässt sich das Problem dadurch lösen, indem Listbox2 genau dann gefüllt wird, wenn ein Eintrag in Listbox1 ausgewählt wurde. Du kannst LB2 auch disabled, *bis* etwas in LB1 gewählt wurde usw.

Als Alternative zur Treeview würde ich statt Listboxen eventuell Comboboxen verwenden. Der imho einzige Grund, eine TV nicht zu verwenden, ist der Platzbedarf (so eine TV verbrät ja doch Platz im Formular). Und hier sind 2 Comboboxen einfach das kompakteste.

Ja ja, eine dropdown-TV-Combo wäre noch besser. Aber die gibt es in der VCLFMX-Welt ja nicht.
  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 19:12 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