Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   ComboBox auswählen + Daten anzeigen (https://www.delphipraxis.net/126966-combobox-auswaehlen-daten-anzeigen.html)

SyntaxXx 5. Jan 2009 21:04


ComboBox auswählen + Daten anzeigen
 
Hi und zwar wurde mir hier schonmal geholfen, und meine frage wurde beantwortet und zwar besser ls ich gehoft hatte.
Deswegen wollte ich jetzt nochmal was fragen und hoffe, das ihr mir wiedr helfen könnt.

Ich habe nun mir ein programm geschrieben, wo man jezt

Name
Nachname
Alter
Ort

eingeben kann, in ein Editfeld.

So wenn man da was eingegeben hat und auf den Button "Save" klickt, dann werden diese Strings in eine .ini gespeichert.

So nun ich die aber wieder laden.

Das wäre an für sich kein Problem, nur ich habe das so gemacht, dass man as jetzt von vershciedenen Leuten eintragen kann.
So deswegen will ich jetzt, die ganzen Sachen in einer Comobox anzeigen lassen, allerdings nur den Nachnamen.
Das habe ich ich auch gemacht, indem ich die Combobox einfach die .ini laden lasse und die Combobox mir die Eigenschaft1 aus der Sektion1 anzeigen lassen soll. Das geht auch.

Nur wenn ich jetzt den geünschten Namen auswähle in der Combobox auswähle soll er mir die restlichen Daten in Editfeldern ausgeben.
Nur wie mache ich das jetzt?

Also was muss ich machen, damit ich, wenn ich mir was ausgesucht hab aus der Combobx auch was damit machen kann?

Im momment kann ich sie ja nur Anklicken und auswählen, aber sie gibt mir ja jetzt nichts aus.


Kleines Beispiel:

Ich habe jetzt in der Combobox "Hallo" drinn stehen.

Was muss ich jetzt machen, bzw wie sieht der code aus, das sobald ich "Hallo" auswähle, er mir sofort in einem dafür vorgesehenen Editfeld "Welt" ausgibt?


Wenn ich das hab, kann ich mir den rest bestimmt selber zusammen bauen. Oder ich frag einfach nochmal^^


Vielen dank schonmal

fkerber 5. Jan 2009 21:06

Re: ComboBox auswählen + Daten anzeigen
 
Hi!

Was du suchst ist wohl das OnChange-Event!


Ciao, Frederic

SyntaxXx 5. Jan 2009 21:14

Re: ComboBox auswählen + Daten anzeigen
 
Hmmm, daran hab ich auch gedacht, trotzdem weiß ich nicht wie ich das jetzt genau anwende.
Hier mal der Code von meiner Combobox:

Delphi-Quellcode:
rocedure TForm1.ComboBox1Change(Sender: TObject);
var cbname : string;
begin
try
ini := TIniFile.Create('c:\Names.ini');
cbname := ini.ReadString('Sektion1', 'Eigenschaft3', '');
 ComboBox1.Items.Add(cbname);
finally
ini.Free
end;

Hiermit lade ich ja die .ini Dtei mit den Namen drinne:
ini := TIniFile.Create('c:\Names.ini');

Hiermit sage ich ihm, das er die Datei, die auf der Eigenschaft1 liegt laden soll und speicher sie auf "cbname":
cbname := ini.ReadString('Sektion1', 'Eigenschaft3', '');

Und hier sag ich ja, das er mir das, was auf "cbname" liegt in der Combobox anzeigen soll.

Jetzt weiß ich nicht, wie ich da Onchange anwenden soll?

Helmi 5. Jan 2009 21:17

Re: ComboBox auswählen + Daten anzeigen
 
Hallo,

du könntest eine Ini-Datei aufbauen, die etwa so ausschaut:

Zitat:

[Huber]
Name=Alfons
Nachname=Huber
Alter=100
Ort=Am Arsch der Welt

[Maier]
Name=Irene
Nachname=Maier
Alter=45
Ort=Am Arsch der Welt links
Im OnSelect deiner ComboBox könntest dann das machen:
Delphi-Quellcode:
uses
  ..., Inifiles;

var
  S: String;
  StringList_Name: TStringList;
  IniFile: TIniFile;
  Alter: String;
  Ort: String;

begin
  //Inifile erzeugen
  IniFile := TIniFile.Create('c:\namen.ini');

  //StringList erzeugen
  StringList_Name := TStringList.Create;

  try
    //Nachname aus ComboBox auslesen
    S := ComboBox1.Items.Strings[ComboBox1.ItemIndex];

    //es ginge auch
    //S := ComboBox1.Text;

    //Section auslesen
    IniFile.ReadSectionValues(S, StringList_Name);

    //StringList prüfen
    If StringList_Name.Count > 0 then
      begin
        //Section-Werte auslesen
        Alter := StringList.Values['Alter'];
        Ort  := StringList.Values['Ort'];
      end;
  finally
    FreeAndNil(StringList_Name);
    FreeAndNil(IniFile);
  end;
end;
So könntest z. B. die Section "Huber" auslesen, wenn in der ComboBox "Huber" ausgewählt wurde.
Die in der Ini-Datei hinterlegten Werte für Alter und Ort würden dann in den Variablen "Alter" bzw. "Ort" stehen.

(Der Code müsste funktionieren, wenn ich mich jetzt nicht vertippt habe)

[Edit]
StringGrid-Prüfung eingebaut

fkerber 5. Jan 2009 21:19

Re: ComboBox auswählen + Daten anzeigen
 
Hi!

Nein, mein Gedanke war ein anderer. Du solltest ja bereits vorher die Einträge in der ComboBox stehen haben (z.B. im FormCreate geladen) und ComboBoxChange wird genau dann aufgerufen, wenn jemand einen Eintrag aus dieser ComboBox auswählt.
Das wäre der richtige Moment um dann ausgehend von dem gewählten Eintrag dann die anderen Daten wie ALter und Ort "nachzuladen"...

Ich hoffe, es ist nun etwas klarer, was ich meinte.


Ciao, Frederic

SyntaxXx 5. Jan 2009 21:40

Re: ComboBox auswählen + Daten anzeigen
 
Kann ich denn irgentwie auf die namen in der Combobox zugreifen?

Sprich wie in ner TStringList?

Also z.b. Combobox.Value (name);

Und dann per schleife.

Also wenn z.b.
if
Combobox.Value (name) = cbname
then

schreib die daten aus der .ini in die Editfelder.




Ich gehe mal davon aus das der Code "Combobox.Value (name)" natürlich total falsch ist.

Aber das ist ja die frage, wie der Code lauten muss.

Helmi 5. Jan 2009 21:44

Re: ComboBox auswählen + Daten anzeigen
 
Wenn du meinen Code oben liest, dann siehst du wie man aus einer comboBox den Text (Namen) des ausgewählten Items ausliest
und wie man in der Ini-Datei danach sucht

SyntaxXx 5. Jan 2009 22:44

Re: ComboBox auswählen + Daten anzeigen
 
Gut dann hab ich noch ein paar fragen zu deinem code:

z.b. das hier:

Delphi-Quellcode:
 try
    //Nachname aus ComboBox auslesen
    S := ComboBox1.Items.Strings[ComboBox1.ItemIndex];
Woher weiß er jetzt, welche Datei ich auswählen will.
Da steht ja nur ItemIndex und nicht was genaues. Das könnte ja doch jeder text in der Combobox sein.


Und die Sectionen auslesen sind auch gnaz anders als ich es kenne.

Dein Code:

Delphi-Quellcode:
IniFile.ReadSectionValues(S, StringList_Name);

Und mein code:

Delphi-Quellcode:
ini := TIniFile.Create('c:\MeineIni.ini');
// INI-Datei und initialisieren
try
var1 := ini.ReadString('Sektion1', 'Eigenschaft1', '');

Und das hier verstehe ich auch nicht:

Delphi-Quellcode:
        //Section-Werte auslesen
        Alter := StringList.Values['Alter'];
        Ort  := StringList.Values['Ort'];


Da ist meine Methode doch viel besser oder nicht?

Hier der inhalt meiner .ini:

[Sektion1]
Eigenschaft1=test1
Eigenschaft2=beispiel1
Eigenschaft3=bla1
Eigenschaft4=http://www.bla1.de

[Sektion2]
Eigenschaft1=test2
Eigenschaft2=beispiel2
Eigenschaft3=bla2
Eigenschaft4=http://www.bla2.de


Wenn ich jetzt was aufrufn möchte, mach ich das einfach mit dem Code, den ich oben genannt habe.


Aber danke schonmal

mkinzler 5. Jan 2009 22:50

Re: ComboBox auswählen + Daten anzeigen
 
Zitat:

Da steht ja nur ItemIndex und nicht was genaues. Das könnte ja doch jeder text in der Combobox sein.
ItemIndex ist der Index des ausgewählten Eintrags
Zitat:

Delphi-Quellcode:
IniFile.ReadSectionValues(S, StringList_Name);

Liest alle Werte eines Abschnitts auf einen Rutsch
Zitat:

Delphi-Quellcode:
Alter := StringList.Values['Alter'];

Ermittelt den Wert der Eigenschaft Alter aus der Stringlsite, in der die Wertepaare eines Abschnitts geladen wurden

SyntaxXx 5. Jan 2009 23:04

Re: ComboBox auswählen + Daten anzeigen
 
Ok und wofür macht er noch die überprüfung

If StringList_Name.Count > 0 then ?


Wenn er die StringList doch gerade erst erstellt, muss sie doch leer sein, oder warum macht er das?

mkinzler 5. Jan 2009 23:20

Re: ComboBox auswählen + Daten anzeigen
 
Es wurden vorher doch alle Wertepaare der angegeben Sektion in diese geladen. Ist Count ß bdeutet es das die Sektion leer war

SyntaxXx 6. Jan 2009 18:37

Re: ComboBox auswählen + Daten anzeigen
 
Hä, sry aber das versteh ich nicht. Was bringt en das, wenn die 0 war. Dasergibt für mich keinen sinn.

Oder soll es heißen, das er das nur rein schreiben soll, wenn die Sektion leer ist?

mkinzler 6. Jan 2009 18:53

Re: ComboBox auswählen + Daten anzeigen
 
Nein, bei leerer SeKtion brauchst man ja nichst auswerten

SyntaxXx 6. Jan 2009 19:27

Re: ComboBox auswählen + Daten anzeigen
 
Hmm ok, soweit habe ich es verstanden.

Aber etzt die sache, die mich am meinsten beschaftigt.

Nochmal zu dieser zeile:
Delphi-Quellcode:
  S := ComboBox1.Items.Strings[ComboBox1.ItemIndex];
Wenn ihr nun sagt, das ItemIndex immer der Aktuel ausgewählte Text in der Combobox ist, ist es doch egal, welches ich nun auswähle, da ja wie gesagt nur der Ausgewählte eben ItemIndex heißt.

Aber ich möchte ja damit verschiedene Sachen öffnn.


Sagen wir, wenn ich "Hans" ausähle, möchte ich alle Daten von Hans haben, oder wenn ich "Peter" auswähle, alle daten von Peter.
Das geht aber ja so nich, weil wenn ich Hans auswähle das ausgewählte ItemIndex heißt und bei Pter genau so.


Oder gibt es da vielleicht as besseres wie ne Combobox?

mkinzler 6. Jan 2009 19:41

Re: ComboBox auswählen + Daten anzeigen
 
ItemIndex ist nur der Index ( Position) des ausgewählten Eintrags.
Über diesen kann man dann die restlichen Daten auswählen. Wenn man diese z.B. in einem dynamischen Array speichert.

SyntaxXx 6. Jan 2009 19:53

Re: ComboBox auswählen + Daten anzeigen
 
Versteh ich echt nich.

Kannste nich mal ein ganz einfaches beispiel machen.

ItemIndex kann doch nich mehrere sachen speichern.

Ich speicher ja die ganzen sachen n einer .ini .

Die ersten sachen i der Section1, die anderen in Section2 .
Wenn ich jetzt wie gerade erwähnt Peter auswähle möchte ich ja die sachen von peter haben.
Wenn aber ItemIndex sich nicht verändert wird er mir ja immer nur das anzeigen, was ich ItemIndex zugewiesen hab.


ich versuche das mal klar zu machen:

So angenommen wir sagen ItemIndex ist eine variable, wovon ich jetzt ausgehe.
Dann sagen wir:

peter ist ItemIndex
Hans ist ItemIndex
Dieter ist IntemIndex

Und ich weise ItemIndex jetzt den String "Guten tag" zu, dann ist es ja egal ob ich
Peter, hans oder Dieter nehme, da ja alles ItemIndex ist und er sowieso immer "Guten tag" ausgeben wird.

Ich möchte es aber so:
peter ist x
hans ist y
Dieter ist z

x="hallo"
y="bye"
z="beispiel"

Dann gibt er mir ja jenachdem was sich wähle, was anderes aus.

Hoffe ihr versteht meine Logik

taaktaak 6. Jan 2009 19:55

Re: ComboBox auswählen + Daten anzeigen
 
Dem ItemIndex wird nix zugewiesen, dieser Index zeigt nur auf den Eintrag in der Liste, der gerade angezeigt wird.

mkinzler 6. Jan 2009 20:02

Re: ComboBox auswählen + Daten anzeigen
 
Index Name
0 Peter
1 Hans
2 Dieter
3 ...
...

Wenn du Peter auswählst ist ItemIndex 0, bei Hans 1 und bei Dieter 2

SyntaxXx 6. Jan 2009 20:08

Re: ComboBox auswählen + Daten anzeigen
 
Ok soweit so gut.
Jetzt aber wieder die frage, woher weiß er dann, was ich ausgewählt habe.
Wenn er nichts speichert, sondern nur das gerade ausgewählte anzeigt, dann kann ich ja nichts zuweisen.

Genau das ist ja mein problem. wie bekomme ich das hin, je nachdem, was ich auswähle, soll er mir was anderes in einem Editfeld ausgeben.


Könntet ihr mir mal so nen Code machen, vielleicht verstee ich es ja dann.


Also in der Combobox stehen die Ziffern 1, 2, 3 .

Wenn ich in der Combobox 1 auswähle soll er mir in einem Editfeld
"ich bin die 1" anzeigen

Bei 2:
"Ich bin die 2"

und bei 3:
"Ich bin die 3"


Könnte mir ds jemand machen?



EDIT hab gerade gesehen, das jemand noch geschrieben hat.

Aber er fängt immer bei 0 an zu zählen oder?

Wenn ja, dann wäre meine frage ja beantwortet.

Nur eine sache noch. Wie rufe ich jetzt im Code die Sachen auf?

Also z.b.

Delphi-Quellcode:
Edit1.ItemIndex1.Text ('Hallo')
Edit1.ItemIndex2.Text ('Guten tag')

oder wie geht das?

Blackheart 6. Jan 2009 20:12

Re: ComboBox auswählen + Daten anzeigen
 
Vieleicht hilft dir das ein wenig auf die Sprünge. :zwinker:
Delphi-Quellcode:
procedure TForm1.ListBox1Click(Sender: TObject);
begin
  Showmessage(IntToStr(ListBox1.ItemIndex) +' - '+ ListBox1.Items.Strings[ListBox1.ItemIndex]);
end;

SyntaxXx 6. Jan 2009 20:14

Re: ComboBox auswählen + Daten anzeigen
 
Was soll mir das sagen?

Was will ich den mit nr Listbox?

Blackheart 6. Jan 2009 20:18

Re: ComboBox auswählen + Daten anzeigen
 
Nagut dann als Combo :zwinker:
Delphi-Quellcode:
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
  Showmessage(IntToStr(ComboBox1.ItemIndex) +' - '+ ComboBox1.Items.Strings[ComboBox1.ItemIndex]);
end;

mkinzler 6. Jan 2009 20:21

Re: ComboBox auswählen + Daten anzeigen
 
Ist ja eigentlich egal ob ListBox oder ComboBox.

Wenn die Infos in einem Array eines Records mit den Details stehen (Namen)
Delphi-Quellcode:
procedure TForm1.cbVornameOnChange( Sender: TObject);
begin
    edVorname.Text := Namen[cbVorname.ItemIndex].Vorname;
    edName.Text := Namen[cbVorname.ItemIndex].Name;
    edPlz.Text := Namen[cbVorname.ItemIndex].Plz;
...
end;

taaktaak 6. Jan 2009 20:22

Re: ComboBox auswählen + Daten anzeigen
 
Hab' mir das nun nicht alles durchgelesen, aber meinst du so etwas:
Delphi-Quellcode:
procedure TForm1.Combobox1Change(Sender:TObject);
begin
  edit1.text:='ich bin die '+TCombobox(Sender).Items[TCommbobox(Sender).ItemIndex]
end;

SyntaxXx 6. Jan 2009 20:34

Re: ComboBox auswählen + Daten anzeigen
 
Arrrrr, ich weiß ihr wollt mir nur helfen, abe das versteh ich nicht.

Ihr sagtet doch was mit ItemIndex1 usw.

Das kan ich aber in euren Codes nicht finden.

mkinzler 6. Jan 2009 20:36

Re: ComboBox auswählen + Daten anzeigen
 
Es gibt einen ItemIndex pro ComboBox. Und dieser hat den Wert des ausgewählten Eintrags

SyntaxXx 6. Jan 2009 20:54

Re: ComboBox auswählen + Daten anzeigen
 
ja aber wie unterscheidet man den dann, was ich ausgewählt habe?

Wir drehen uns irgentwie im kreis.
Sry aber es muss doch irgentwo ne anleitung geben, wie man zwischen den verschiedenen Sachen auswählt.

Aber danke da sihr so geduldig seit^^.

taaktaak 6. Jan 2009 20:57

Re: ComboBox auswählen + Daten anzeigen
 
Ähhhh, ja, ich denke auch....
Der ItemIndex gibt die Nummer des ausgewählten Listenelements (also den Index) an.
Sorry, aber was verstehst du denn daran nicht?

SyntaxXx 6. Jan 2009 21:03

Re: ComboBox auswählen + Daten anzeigen
 
Ok, nochmal.

Also ich habe jetzt eine Combobox mit folgenden Texten drin:

1
2
3
4
5


So wenn ich jetzt 1 auswähle, hat die 1 ItemIndex.
Wenn ich 2 auswähle, dann hat die 2 auch ItemIndex.

Und das gleiche bei dem Rest auch.

Aber jenachdem, was ich auswähle soll aber was anderes in einem Editfeld angeziegt werden.


Wie mache ich das jetzt?


Also zeigt mir doch jetzt einfch mal euren Code für folgende aufgabe.

Ihr macht eine Combobox und macht dort fplgende einträge rein.

1
2
3

Wenn ich die 1 auswähle, soll in dem Editfeld "Hallo" stehen.
Bei 2 soll dort "Guten tag" stehen.
Und bei 3 soll da "bye" stehen.

So wie sieht jetzt der Code dafür aus?

Wenn ich dfür den code habe, ist meine frage beantwortet.

taaktaak 6. Jan 2009 21:06

Re: ComboBox auswählen + Daten anzeigen
 
Auch wenn's schon mal gesagt wurde...

So wenn ich jetzt 1 auswähle, ist ItemIndex=0
Wenn ich 2 auswähle, ist ItemIndex=1
usw.

Helmi 6. Jan 2009 21:12

Re: ComboBox auswählen + Daten anzeigen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

ich hab mal ein einfaches Beispiel angehängt.

Bei der ersten ComboBox wird der ItemIndex abgefragt, bei der Zweiten der Text.

Blackheart 6. Jan 2009 21:14

Re: ComboBox auswählen + Daten anzeigen
 
Nun ist es auch egal :zwinker:
Delphi-Quellcode:
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
  case ComboBox1.ItemIndex of
  0: Edit1.Text:='Hallo';
  1: Edit1.Text:='Guten tag';
  2: Edit1.Text:='bye';
  end;
end;

SyntaxXx 6. Jan 2009 21:26

Re: ComboBox auswählen + Daten anzeigen
 
So endlich.
Dankesehr, ds is genau das wa sich wollte^^.

Werde es jetzt probeiren, sollte aber jetzt gehen.

mkinzler 6. Jan 2009 21:27

Re: ComboBox auswählen + Daten anzeigen
 
Und was ist jetzt anders als bei den vorigen Beispielen?


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:39 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-2025 by Thomas Breitkreuz