Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Tabsheetwechsel mit Bedingung verknüpfen (https://www.delphipraxis.net/158010-tabsheetwechsel-mit-bedingung-verknuepfen.html)

Ykcim 2. Feb 2011 10:59

Tabsheetwechsel mit Bedingung verknüpfen
 
Hallo Zusammen,

ich habe in meinem Programm ein PageControl mit mehreren TabSheets drauf. Wenn diese TabSheets geöfnet werden, werden auch ein paar Proceduren durchlaufen. Diese Proceduren benötigen Werte, die ans anderen Tabsheets ermittelt werden.

Jetzt kann es aber sein, dass ein Wert noch nicht verfügbar ist (warum auch immer). Ich möchte gerne, dass vor dem Wechsel der TabSheets geprüft wird, ob die erforderlichen Werte verfügbar sind. Wenn ja, soll der TabSheetwechsel durchgeführt werden, wenn nein, soll der TabSheetwechsel nicht durchgeführt werden.

Ich habe bei allem Suchen nichts gefunden...

Hat hier jemand einen Idee für mich?


Vielen Dank

Ykcim

mkinzler 2. Feb 2011 11:05

AW: Tabsheetwechsel mit Bedingung verknüpfen
 
Geht im Event onChanging

guinnes 2. Feb 2011 11:06

AW: Tabsheetwechsel mit Bedingung verknüpfen
 
Dafür hat das PageControl das Ereignis OnChanging

Ykcim 2. Feb 2011 11:10

AW: Tabsheetwechsel mit Bedingung verknüpfen
 
Hallo,

vielen Dank für die schnelle Hilfe!!!

Ich habe es schon versucht, im Event OnChanging. Die Prüfung findet auch vor der Wechsel statt.
Ich habe dann angegeben, dass das entsprechende TabSheet Enable:=true sein soll. Es wird aber dennoch geöffnet...

Wie würdet Ihr vorgehen?

Vielen Dank

Ykcim

mkinzler 2. Feb 2011 11:12

AW: Tabsheetwechsel mit Bedingung verknüpfen
 
Setzte AllowChanging auf False, wenn du einen Wechsel verhindern willst

Ykcim 2. Feb 2011 11:19

AW: Tabsheetwechsel mit Bedingung verknüpfen
 
Für das TabSheet oder für das PageControl?
ANdere Tabsheets sollen weiter erreichbar sein können, da nicht jedes TabSheet die gleichen Daten benötigt. Ich brauche eine Kontrolle vor dem Wechsel, ob die erforderlichen Daten für das Tabsheet, welches geöffnet werden soll, verfügbar sind. Wenn nicht, soll der Wechsel auf dieses Tabsheet nicht vollzogen werden.

mkinzler 2. Feb 2011 11:33

AW: Tabsheetwechsel mit Bedingung verknüpfen
 
Der Event feuert für jedes TabSheet

In ihm kannst du je nach TabSheet eitscheiden, welche überprüfungen durchgeführt werden sollen und ob gewechselt werden soll

Ykcim 2. Feb 2011 12:14

AW: Tabsheetwechsel mit Bedingung verknüpfen
 
Danke für die Erklärung!

Ich komme leider noch nicht ganz dahinter.

Delphi-Quellcode:
if Daten verfügbar then
  begin
    Tabsheetname.AllowChanging ???
    oder
    PageControlname.AllowChanging???
  end;
Beide Varianten werden nicht erkannt. Ich weiß nicht, wie ich das "AllowChanging" anwenden muss.

Ykcim 2. Feb 2011 12:20

AW: Tabsheetwechsel mit Bedingung verknüpfen
 
Sorry!!!

AllowChange ist ja eine mitgelieferte Variable der Procedure!

Wie kann ich diese auf ein bestimmtes TabSheet anwenden?

Ich habe gerade folgendes ausprobiert:

Delphi-Quellcode:
if Daten NICHT verfügbar then
  begin
    AllowChange:=false;
  end;
Aber wie kann ich abfragen, welches Tabsheet eigentlich geöffnet werden sollte?

guinnes 2. Feb 2011 12:21

AW: Tabsheetwechsel mit Bedingung verknüpfen
 
Delphi-Quellcode:
AllowChanging := Daten verfügbar;
AllowChanging ist ein Var-Parameter des Events

Bbommel 2. Feb 2011 12:25

AW: Tabsheetwechsel mit Bedingung verknüpfen
 
Zitat:

Zitat von Ykcim (Beitrag 1079056)
Aber wie kann ich abfragen, welches Tabsheet eigentlich geöffnet werden sollte?

Aus der Online-Hilfe von D2009:

Delphi-Quellcode:
procedure TForm1.PageControl1Changing(Sender: TObject; var AllowChange: Boolean);
begin
  if ((Sender as TPageControl).ActivePage = TabSheet1) then
    AllowChange := (Edit1.Text <> '')
  else
    AllowChange := True;
end;

Das sollte dir die nötigen Ansätze geben. :)

Bbommel 2. Feb 2011 12:37

AW: Tabsheetwechsel mit Bedingung verknüpfen
 
Kleiner Nachtrag:

Ganz so geht das nicht. Ich habe gerade noch was gestest:

Im OnChanging hast du noch die alten Werte für TabIndex stehen, aber weißt nicht, wo die Reise hingehen soll.

Im OnChange (ohne -ing) hast du die neuenWerte für TabIndex stehen.

Du müsstest dir also in eine zusätzliche Variable im OnChanging den alten Wert von TabIndex merken, dann im OnChange deine Prüfungen durchführen, abhängig davon, was geöffnet werden soll (also abhängig vom dann gültigen Wert von TabIndex) und dann, falls die Prüfung fehlschlägt, den alten, zwischengespeicherten Wert von TabIndex wieder zuweisen.

Bis denn
Bommel

Bummi 2. Feb 2011 12:43

AW: Tabsheetwechsel mit Bedingung verknüpfen
 
@mkinzler
er wird das Problem haben dass er das Zieltabsheet beim Klicken nicht kennt...

EDIT:
sorry Bbommel's Eintrag übersehen , mhhhh :gruebel:

Ykcim 2. Feb 2011 12:46

AW: Tabsheetwechsel mit Bedingung verknüpfen
 
@ Bummi
Genau das ist mein Problem!

@Bbommel
Das werde ich mal fix testen und melde mich dann gleich wieder!

Ykcim 2. Feb 2011 13:14

AW: Tabsheetwechsel mit Bedingung verknüpfen
 
Auf diese Weise funktionierte es. Das einzige, was ich schöner gefunden hätte, wenn der Wechsel garnicht erst erfolgen würde, statt wie jetzt erst erfolgt und dann wieder zurückgeht...
Delphi-Quellcode:
  if Listen.ActivePageIndex=4 then
    if WAAUNR.Caption='' then
      Listen.ActivePageIndex:=StartTab;
Aber das Wichtigste funktioniert erst einmal - der Rest ist Kosmetik.

Vielen Dank!!!

Ykcim


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:27 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