Autor Beitrag
Mike
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 41



BeitragVerfasst: Mo 15.07.02 15:37 
Hi Leute,

folgendes Problem: Ich habe eine TPageControl worauf sich einige TTabSheets befinden. Eine davon - nennen wir sie tsKundendat - soll nur zugänglich sein wenn eine bestimmte Bedingung erfüllt ist. Ein anderes TabSheet beherbergt ein TDBGrid mit meinen Adressen. Ein Feld davon ist boolean und heißt Kunde. Wenn dieses Feld Kunde TRUE ist soll tsKundendat zugänglich sein, sonst nicht. Jetzt habe ich dem Ereignis OnDataChange der DataSource des TDBGrid folgendes zugewiesen:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TBeispielForm.srcVonTDBGridDataChange(Sender: TObject; Field: TField);
begin
  if field = nil then {Wenn zu einem anderen Datensatz gewechselt wird}
  begin
    if Beispieltabelle.FieldByName('Kunde').asboolean 
      then tsKundendat.tabVisible := true
      else tsKundendat.tabVisible := false;
  end;
end;

Das funktioniert auch soweit ganz gut. Nur daß der Inhalt der TabSheet auf der man sich befindet manchmal verschwindet. (Sieht dann so aus als hätte man TabSheet.visible := false auf dem angezeigten TabSheet angewandt.)
Weiß jemand ob das ein Delphi-Problem ist oder ob ich solche "Tab-Sheet-Hide-Aktionen" nicht an das Ereignis OnDataChange einer DataSource hängen darf.
Wäre cool wenn mir jemand helfen könnte. :)

Gruß
Mike
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Mo 15.07.02 16:06 
Mit der TabVisible Eigenschaft von tTabSheet hatte ich auch mal ein paar Probleme. Weiß aber nicht mehr genau in welchem Zusammenhang.

Versuch das mal:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TBeispielForm.srcVonTDBGridDataChange(Sender: TObject; Field: TField); 
begin 
 if field = nil then {Wenn zu einem anderen Datensatz gewechselt wird} 
 begin 
  if Beispieltabelle.FieldByName('Kunde').asboolean 
   then tsKundendat.PageControl := nil 
   else tsKundendat.PageControl := pcMain; // <-Hier Das PageControl eintragen
 end; 
end;
Ich weiß auch nicht ob das jetzt hilft. Versuch es einfach mal :-D

Gruß
Mike Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 41



BeitragVerfasst: Di 16.07.02 14:30 
Das funktioniert leider auch nicht. Das Problem scheint dann aufzutreten, wenn beim Wechseln von einem TabSheet zum anderen ein drittes TabSheet ausgeblendet wird (egal ob mit TabVisible := false oder mit Tinos Methode). Eine richtige Regelmäßigkeit habe ich aber noch nicht festgestellt.

Gruß
Mike
Renegade
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 358

Win XP Pro, Win 7 Beta
BDS 2006
BeitragVerfasst: Mi 17.07.02 20:06 
Die PageControls in Delphi scheinen wirklich generell eine Macke zu haben (nicht nur diese).

Zu Deinem Problem:
Ich konnte den Fehler rekonstruieren und muß dir sagen, daß ich dafür kein Allerheilmittel habe. Ich konnte den Fehler dadurch kompensieren, indem ich nach dem tabvisible:=false einen anderen Tab mit TabN.BringToFront wieder hab zeichnen lassen.
Endgültig ging der Fehler bei mir allerdings auch nicht weg.

Hoffe das hat dir ein bischen geholfen :wink:

_________________
Sokrates (468 v.Chr. - 399 v.Chr.)
"Es ist keine Schande, nichts zu wissen, wohl aber, nichts lernen zu wollen."
Mike Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 41



BeitragVerfasst: Do 08.08.02 17:11 
Sorry, daß ich mich erst jetzt rühre. Also
Zitat:
Ich konnte den Fehler dadurch kompensieren, indem ich nach dem tabvisible:=false einen anderen Tab mit TabN.BringToFront wieder hab zeichnen lassen.

Das hat bei mir auch nicht geklappt. Dieses "wieder verschwinden lassen" des TabSheet-Inhalts passiert irgendwann nach TabSheet.OnShow und vor PageControl.OnChange.
Bei mir funzt es wenn ich bei PageControl.OnChange
ausblenden Quelltext
1:
TabSheet.Visible := true					

verwende. (Nicht TabSheet.TabVisible := true)

_________________
Mike :-)