![]() |
Anzeigen eines bestimmten Forms
Hallo,
ich habe eine ListBox auf meiner Hauptform und wähle dann einen Eintrag davon aus. dann hole ich mir den gewählten index mit
Delphi-Quellcode:
und mit dem index hole ich mir den namen des eintrages
index:= listbox1.ItemIndex;
Delphi-Quellcode:
und dann möchte ich die Form aufrufen, normalerweise ja mit
name:= listbox1.Items.ValueFromIndex[0];
Delphi-Quellcode:
Problem: Wie kann ich diesen Aufruf ausführen, wenn der Name der Form in der Variablen name steht? Und ich möchte auch noch den Wert einer der Variablen dieser Form setzen.
Form7.ShowModal;
Hat da einer vielleicht eine Idee? |
Re: Anzeigen eines bestimmten Forms
Hai Susanne,
kannst Du das ganze nicht einfach mit einem Case-Of Block lösen? Oder ein Array of TForm. |
Re: Anzeigen eines bestimmten Forms
ich würde auch zu einem array of TForm raten. alternativ geht auch FindComponent(), aber das mag ich persönlich nicht so.
|
Re: Anzeigen eines bestimmten Forms
es ist nur so, dass ich dort verschiedene Listen einlese und anzeige, deshalb dachte ich, dass das so ganz gut wäre, wie ich mir das dachte und mir sonst auch nichts eingefallen ist, wie ich es besser machen könnte.
|
Re: Anzeigen eines bestimmten Forms
wie gesagt, FindComponent() nutzen, damit kann man Objekte nach Namen suchen
|
Re: Anzeigen eines bestimmten Forms
Hallo Susanne,
ohne Kommentar zu deinem Vorhaben hier eine technische Lösung für das Arbeiten mit Forms unter Benutzerkontrolle, wobei die Forms erst dann instanziiert werden, wenn sie gebraucht werden. Die automatische Instanziierung in den Projektoptionen abschalten und folgenden Code (angepasst an deine Verhältnisse) in die Form-Units einfügen:
Delphi-Quellcode:
Im Hauptformular (dem mit der Listbox) kannst du dann so vorgehen:
...
initialization RegisterClass(TForm2); finalization UnregisterClass(TForm2); end.
Delphi-Quellcode:
Grüße vom marabu
var
fName: string; fClass: TFormClass; f: TForm; begin fName := 'Form2'; fClass := TFormClass(Classes.GetClass('T' + fName)); if Assigned(fClass) then begin Application.CreateForm(fClass, f); f.ShowModal; f.Free; end else ShowMessage('oops!') end; |
Re: Anzeigen eines bestimmten Forms
Delphi-Quellcode:
oder sowas in der art :)
uses
Contnrs; var xFormList: TObjectList; begin xFormList := TObjectList.Create; xFormList.Add(myErstelltesForm); ... end; function GetForm(xList: TObjectList; const sFormName: string): TForm; var iIndex: integer; begin Result := nil; for iIndex := 0 to xList.Count - 1 do if TForm(xList[iIndex]).Name = sFormName then begin Result := TForm(xList[iIndex]); Exit; end; end; var xTermin: TTermin; // begin xTermin := GetForm(xFormulare, 'frmTermin'); if Assigned(xTermin) then begin xTermin.Button := 'Fenster'; // button? nich button.caption? xTermin.ShowModal; end; end; |
Re: Anzeigen eines bestimmten Forms
wie mache ich das denn mit FindComponent? Ich komme damit irgendwie nicht zurande.
Also ich mit auf meiner Form3 und habe dort die Listbox mit dem Inhalt und in index ist der gewählte eintrag aus der listbox.
Delphi-Quellcode:
wenn ich nun TTermin angebe dann funktioniert das, aber das kann doch je nach ausgewählten Stempel variieren, wie kann ich das denn variable davor setzen? Oder steh ich nur irgendwie auf meiner Leitung?
case index of
0: begin Stempel:= listbox1.Items.Strings[0]; //Stempel:= 'Termin' //TTermin(FindComponent(Stempel)).Button:= 'Fenster'; //TTermin(FindComponent(Stempel)).ShowModal; end; |
Re: Anzeigen eines bestimmten Forms
Moin!
1. FindComponent() ist eine Methode der Form und findet daher auch nur Elemente der Form und nicht andere Forms... 2. Schau dir mal TScreen an bzw. die globale Instanz Screen aus der Unit Forms an. Diese bietet dir als Eigenschaft Forms[] und FormCount... MfG Muetze1 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:09 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