Control aus einer Subform aktivieren

16. März 2006 13:19

Hallo,

in einer Subform vom Auftragsformular, möchte ich aus einen Feld in der Tablebox gerne eine Control auf dem Auftagsformular aktivieren, wenn ein bestimmtes Ereignis eintritt.

Folgendes habe ich bereits folgendes ausprobiert ohne Erfolg:
Ich habe eine Funktion im Auftrag erstellt, mit Code der meine gewünschte Control Aktiv setzt.
Mit dem nachfolgenden Code im entsprechenden Feld der Tablebox (der Subform!) wollte ich die Funktion "AktiviereWunschControl" des Auftags aufrufen und das entsprechende Feld aktiv setzten.
Code:
IF STRPOS(AktLieferMenge,'%') = 1 THEN
  FORM.AktiviereWunschControl;

Die Funktion im Auftrag wird auch aufgerufen, jedoch bleibt nach wie vor das Feld in der SubForm aktiv!


Kann mir einer von Euch sagen, ob dieses Möglich ist, und wenn ja wie?
Gruß Mikka

16. März 2006 13:31

ICh verstehe die Problemstellung noch nicht ganz.

Willst Du aus einem Subform ein Control auf dem MainForm aktivieren, oder ist das zu aktivierende Control auch auf dem SubForm?

16. März 2006 13:35

Ich möchte aus der Subform ein Control auf der MainFom aktivieren.
Ähnlich dem Propertie "NextControl", bei dem ich nur die Control ID angeben muß!
Gruß Mikka

16. März 2006 13:39

solange die Mainform nicht wieder den Focus hat, wirst du da auch keine änderung sehen.
klicke anschließend mal irgendwo in die Mainform. Ist dann die Control aktiv?

16. März 2006 14:12

Leider nein,
ich habe es mehrfach ausprobiert, leider ohne Erfolg.

Ist es den überhaupt möglich aus der Subform ein Control der Mainform zu Aktivieren?
Gruß Mikka

16. März 2006 14:20

gute Frage, probiert hab ich es noch nicht.
nur das mit dem aktualisieren der Mainform ist auch das Problem, wenn dort Summenfelder sind, die auf Änderungen in der Auftrags-Zeile reagieren sollen. Daher meine Nachfrage.

16. März 2006 14:46

Meiner Meinung nach geht das nicht, da das Subform nicht weiss, welches das MainForm ist, von dem es aufgerufen wurde.

Mit etwas Fleiss könnte man das ev. folgendermassen umgehen:

1.
Erstellen einer Funktion im Subform, die als Rückgabeparameter das zu aktivierende Control zurückgibt (muss natürlich hart vercodet sein mit einem Wert, der später wieder interpretiert werden kann)

2.
Auf dem MainForm den OnTimer-Trigger aktivieren z.B. mit 1000

3.
Jedes mal, wenn der OnTimer-Trigger durchlaufen wird den Rückgabewert aus der Funktion unter Puntk 1 abfragen und dann mit ACTIVATE das entsprechende Control aktivieren


Habs zwar nicht ausprobiert, denke aber, das könnte hinhauen.

16. März 2006 16:08

Ich würde das so machen. Du erstellst die Funktion welche das Control aktiviert in der Mainform. Nun deklarierst du die Mainform als Variable in der Subform. ÜBer die Variable kannst du nun die Funktion in der Mainform aufrufen, et voilà dein Control ist aktiviert :-)

16. März 2006 16:30

Das funktioniert so leider nicht. Auf einer Form-Variablen sind die Controls nicht sichtbar. Zudem ist ja nicht klar, welche Instanz der Form angesprochen werden soll. Die gleiche Form kann ja mehrmals geöffnet sein.

Oder habe ich da was übersehen?

16. März 2006 16:45

Würdest du ja auch nicht brauchen. Du rufst ja die Funktion in der Mainform auf, diese Funktion wiederum aktiviert das Control, das müsste schon funktionieren...

16. März 2006 16:47

Wobei das mit der Instanz ein guter Punkt ist wie ich zugeben muss...

16. März 2006 16:53

Hallo JanV,

den Weg den du Beschrieben hast, habe ich ausprobiert(Meine erste Frage hier im Toppik, habe es leider nicht Erwähnt, das ich die Form als Variable eingebunden habe).
Mein Gedanke war der gleiche!

Aber wie rotsch es beschrieben hat, woher soll die FormVariable wissen, aus welcher instanz diese sit!

Mich wundert es, das bisher keiner ein sollches Problem hatte?!

Gut, aber eine Lösung habe ich noch nicht.
Rotsch´s Lösung habe ich noch nicht Probiert, ich werde hierzu ein feedback geben, sobalt ich an der Stelle weitergemacht habe!
Gruß Mikka

16. März 2006 17:03

Also, das wollte ich jetzt wissen.

Ich habe auf dem MainForm eine Funtkion erstellt, die das Feld Name auf EDITABLE=FALSE stellt.

Dann habe ich auf dem SubForm eine Form-Variable des MainForms erstellt und aus einer Assist-Funktion eines Feldes die vorher erstellte Funktion auf dem MainForm aufgerufen.

Da tut sich absolut nichts. Ich bin mir ziehmlich sicher, das man das nicht hinbekommt mit Navision. Von oben nach unten (Main -> Sub) schon, aber nicht umgekehrt.

Da müssen wir auf wohl auf die .net Version warten, mit der kann man dann ja Objekte hin und herschicken. Damit gehts dann :-D

16. März 2006 17:21

Stimmt ich habs eben auch ausprobiert...das ist ja seltsam also von meiner Logik aus gesehen sollte das gehen, aber gut, mich frägt ja keiner ;-)

16. März 2006 17:57

Juhu, :lol:
ich habe es gefunden.
Eure Hinweise und eine kleine Pause brachten mich die Idee.

Warum in der Subform das Ereignis abfangen, wenn es auf der Mainform auch geht :?:
Den Timer mit eingebunden und voila es klappt.

Lösungsweg:
1. Timer auf 1000 ms setzten.
2. Auf dem Timer-Trigger den Code ablegen (Siehe Beispiel!)

Code:
lr_Verkaufszeile.SETRANGE(lr_Verkaufszeile.Belegart,lr_Verkaufszeile.Belegart::Auftrag);
lr_Verkaufszeile.SETRANGE(lr_Verkaufszeile."Belegnr.","Nr.");
IF lr_Verkaufszeile.FIND('-') THEN BEGIN
  REPEAT
  IF STRPOS(lr_Verkaufszeile.Beschreibung2,'%') = 1 THEN BEGIN
    lr_Verkaufszeile.Beschreibung2 := 'TEXT001';
    lr_Verkaufszeile.MODIFY;
    CurrForm."<Nr.>".ACTIVATE;
  END;
  UNTIL lr_Verkaufszeile.NEXT=0;
END;

Zugegeben, es ist nicht der elegante Weg, ehr "Quick and dirty", aber es Funktioniert.
Falls einer von Euch doch zu den Problem eine bessere Lösung hat, bin ich "ganz Ohr".
Guß Mikka

16. März 2006 18:11

Nein :oops:
nicht so ganz, nur wenn der Datensatz verlassen wird!

Wenn auf dem entsprechenden Feld, auf dem "OnAfterValidate" Trigger ein
CurrForm.SAVERECORD;
hinterlegt wird klappt es besser.
Gruß Mikka