Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - TabSheet nicht zugänglich machen
Mike - Mo 15.07.02 14:37
Titel: TabSheet nicht zugänglich machen
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:
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 - Mo 15.07.02 15: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:
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 - Di 16.07.02 13: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 - Mi 17.07.02 19: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:
Mike - Do 08.08.02 16: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
Quelltext
1:
| TabSheet.Visible := true |
verwende. (
Nicht TabSheet.
TabVisible := true)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!