| Autor |
Beitrag |
Chaosworld
      
Beiträge: 49
|
Verfasst: Mi 24.03.04 04:07
ich habe mehre Formulare, ein Formular Primaer und ein Formular Sekundaer-
Ich erzeuge im Formular Primaer mit Hilfe des Befehls:
TSekundaer.Create(Self);
nun werden im Formular mehre Aktionen gemacht. Am ende wird das Formular mit
Action := acFree;
gelöscht.
Soweit klappt es auch alles. Nun möchte ich aber an das Masterformular (das formular, von dem das Formular aus erzeigt wurde) ein paar Werte zurück übergeben.
Also irgendetwas in der art
var Firma, Nutzer: integer;
...
TSekundaer.Create(Self, (Firma, Nutzer));
was natürlich so nicht geht.
Bisher habe ich es immer so gemacht, dass ich die OnClose aktion benutzt habe, und in die Variablen rein geschrieben. Problem ist jedoch, dass das Formular von verschiedenen Formularen aufgerufen werden soll, z.T. auch gleich von mehren Formularen aus.
Wie mache ich das?
Hat da jemand eine Idee, wie ich das mache´? Mir fällt einfach ncihts ein.
danke im vorraus
Chaosworld
|
|
tmc2004
      
Beiträge: 140
zuviele
D7,D8
|
Verfasst: Mi 24.03.04 09:04
Definiere doch einfach in deiner sekundären eine globale variable. Dann machst du noch ein uses von der unit und schon kannst du nach dem createn auf deine variable zugreifen z.b
form1.firma:='blabla';
So kannst du auf andere Formen zugreifen.
Gruß
tmc
_________________ it's not a bug it's a feature
|
|
Chaosworld 
      
Beiträge: 49
|
Verfasst: Mi 24.03.04 18:20
Danke für die Antwort, leider ist das nicht das was ich brauche. Ich beschreibe kurz was ich machen:
Ich habe ein Formular, in dem die Kundennummer eingegeben werden soll.
Wenn nun die Kundennummer nicht bekannt ist, wird ein Neues Formular aufgerufen, in dem kann über beliebige Suchkrieterien der gewünschte Kunde gesucht werden. Ist nun die Suche durchgeführt, wird evtl. noch schnell markiert, welcher Kunde der richtige ist, falls mehre Kunden in das Suchkrieterium passten. Danach wird das Formular sofort terminiert. Und zurück soll die Kundennummer gegeben werden.
Also mit globalen Variablen arbeiten wäre nicht so der Hit. Müsste also entweder direct im Aufruf des Formulars gemacht werden, oder aber in der OnClose Aktion des Formulars.
Nachdem das Formular geschlossen ist, soll dann das Formular dass das Formular afgerufen hatte, direkt mit den Daten arbeiten. Also z.b. siche die Datensätze raussuchen, die zu dem Kunden passen,... (die aufgaben sind unterschiedlich bei den verschiedenen Formularen).
Ich hoffe das beschreibt mein Problem besser
danke für jedenTipp
Chaosworld
|
|
tmc2004
      
Beiträge: 140
zuviele
D7,D8
|
Verfasst: Mi 24.03.04 19:06
Das sollte doch auch einfach gehen du schreibst in das onclose ereignis einfach z.b.
Delphi-Quelltext 1:
| form1.edit1.text:=dbgrid1.fields[0].asstring; |
aber um ein uses glaub ich wirst du nicht rum kommen
Gruß
tmc
_________________ it's not a bug it's a feature
|
|
Chaosworld 
      
Beiträge: 49
|
Verfasst: Mi 24.03.04 20:01
ganz genau so hatte ich es bisher auch immer gemacht
allerdings gibt es da noch ein problem
und zwar
wird das selbe formular von 4 verschiedenen Formularen aufgerufen
müsste also so aussehen
wenn von form1 erzeugt, dann: form1.edit1.text:=dbgrid1.fields[0].asstring;
wenn von form2 erzeugt, dann: form2.edit1.text:=dbgrid1.fields[0].asstring;
wenn von form3 erzeugt, dann: form3.edit1.text:=dbgrid1.fields[0].asstring;
wenn von form4 erzeugt, dann: form4.edit1.text:=dbgrid1.fields[0].asstring;
das war das problem bei der lösung, daher habe ich um eine bessere lösung gesucht
|
|
MSCH
      
Beiträge: 1448
Erhaltene Danke: 3
W7 64
XE2, SQL, DevExpress, DevArt, Oracle, SQLServer
|
Verfasst: Mi 24.03.04 20:26
** ???? ***
Ich verstehs nicht, aber vieleicht rate ich mal; du hast mehrere Forms, die für andere Forms Rückgabewerte produzieren.
Gut ist, dass du nicht über globale Variablen gehen willst (Programmierstil der 80'er).
Schlecht; du greifst direkt auf die Eigenschaften der Forms zu.
Stichwort Kapselung.
Also, stelle Eigenschaften von Forms (z.b. Inhalte von TEdits etc.) als Eigenschaften der Form zur Verfügung, dann klappts auch mit der Übergabe an andere.
Ich erspar mir mal die Beispiele dazu und verweise mal auf die OH und Quell-Beispiele von D.
Stichwort Property.
grez
msch
_________________ ist das politisch, wenn ich linksdrehenden Joghurt haben möchte?
|
|
Chaosworld 
      
Beiträge: 49
|
Verfasst: So 28.03.04 02:42
hey danke für deine antwort
bin zwar nicht sicher, ob ich es genau so gemacht habe, wie du es meinest,aber es ist auf jedenfall eine lösung
habe es so gemacht
das formular geschrieben
die onclose aktion weg gelassen
und dann über neu das formular weitere male eingefügt, und da jeweils die onclose aktion formuliert
und dann an globale variablen der vorherigen formulare die werte übergeben
und bei onactive nachsehene lassen, ob da werte drin stehen, fallsja, diese dann ausgewerten
ich muss sagen, dass das keine wirklich saubere lösung ist, aber schon mal besser
gewünscht hätte ich mri eine so saubere Variablenübergabe, so wie ich es bei proceduren auch immer mache über
procedure xxx (abc: string, var def: string);
je nachdem wie es gebraucht wird.
falls also irgend jemand eine möglichkeit kennt, genauso sauber Varableninhalten zwischen formularen auszutauschen, wäre echt super. (oder vielleicht über den weg masterformular.variable:=...wobei masterformular immerdas formular ist, dass das formular erzeugt hat)
ansonsten aber erst einmal danke
mfg
Chaosworld
|
|
|