Seite 1 von 1
[besser] Zuätzliches Auswahl-Formular sichtbar machen
Verfasst: Do, 06.09.2012 17:23
von juetho
Es gelingt mir nicht, eine kleine Tabelle in einem Formular bei Bedarf zu aktivieren.
Aufgabe: Das Formular enthält Unterformulare: MainForm > frmName > frmLocation. Das letzte Formular enthält ein
Eingabefeld für das Länderkennzeichen und ein
Anzeigefeld für den Ländernamen. Beim Verlassen dieses Feldes wird der Inhalt in einem Makro geprüft:
- DE > keinen Ländername anzeigen
- sonst > suche den Ländernamen in der Tabelle sys_lkz.
- gefunden > zeige den Ländernamen an
- nicht gefunden > wechsle in die Liste der Länder, sodass ein Land explizit ausgewählt wird
Alles mit Ausnahme des letzten Punkts funktioniert. Ich beschränke mich deshalb beim Makro auf diesen Abschnitt. Dafür habe ich ein Formular
frmSucheLkz (Tabelle: sys_lkz) mit einem grid (Tabellenkontrollfeld) vorgesehen. Im Entwurf wird das grid mit der Eigenschaft "Sichtbar = Nein" versehen. Mit dem folgenden Code (in Anpassung an
Dannenhöfer soll das Grid sichtbar werden:
Code: Alles auswählen
grid = thisComponent.drawpage.forms.getByName("MainForm").getByName("frmSucheLkz").getByName("grid")
oCtlView = oDocCrl.GetControl(grid)
oCtlView.Visible = true
Aber das klappt nicht. Dannenhöfer weist ausdrücklich darauf hin, dass der Code in Version 3.1 nicht funktioniert; aber in der aktuellen
Buglist finde ich nichts dazu. Ich habe versucht, das Formular frmSucheLkz auf die gleiche Ebene wie MainForm zu setzen; aber das hat nichts geändert.
- Fehlt eine weitere Anweisung, z.B. dass das grid den Eingabefokus erhalten soll oder das Formular MainForm neu aufgebaut werden muss?
- Oder muss ich ganz anders vorgehen? (Ein völlig neues Formular wie im Handbuch Seite 249 f. möchte ich nicht benutzen, weil es nur eine Hilfsmaßnahme sein soll und deshalb das eigentliche Formular aktiv bleiben soll.)
Für Tipps wäre ich sehr dankbar. Jürgen
Re: Zuätzliches Auswahl-Formular sichtbar machen
Verfasst: Do, 06.09.2012 17:51
von RobertG
Hallo Jürgen,
ich habe das folgende Verfahren gerade mit einem Tablecontrol getestet:
Code: Alles auswählen
oDocCrl = ThisComponent.getCurrentController()
oCtlView = oDocCrl.GetControl(oFeld)
IF Sichtbar = "sehen" THEN
oCtlView.Visible=true
ELSE
oCtlView.Visible=false
END IF
Ich gebe der Prozedur die verschiedenen Komponenten mit, um an das Feld zu kommen, (wie Du auch) - zusätzlich die Botschaft "sehen", um sichtbar und unsichtbar zu schalten. Damit kann ich das Tabellenkontrollfeld zeigen und wieder verbergen.
Vielleicht geht das ja nicht, wenn das Tabellenkontrollfeld von vornherein unsichtbar über die GUI geschaltet wurde. Dann müsste eben zum Formularstart das Makro auch betätigt werden.
oDocCrl ist bei Dir allerdings nicht definiert ...
Gruß
Robert
Re: Zuätzliches Auswahl-Formular sichtbar machen
Verfasst: Fr, 07.09.2012 17:19
von juetho
Danke, ihr beiden. Der
entscheidende Hinweis war tatsächlich, dass das Kontrollfeld nicht im Designer auf unsichtbar gesetzt werden darf, sondern erst beim Laden des Formulars. Damit bin ich einen Schritt weiter und habe gleichzeitig erkannt, dass ein Feld, das "hinter" dem betreffenden Grid liegt, weiterhin sichtbar wird, sobald es den Fokus erhält. Das muss also zusätzlich geregelt werden (gehört aber in eine neue Diskussion).
Für die Lösung habe ich eine allgemeine Methode definiert:
Code: Alles auswählen
Sub SetVisible ( oCtrl as Object, value as Boolean )
oDocCrl = ThisComponent.getCurrentController()
oCtlView = oDocCrl.GetControl(oCtrl)
oCtlView.Visible = value
End Sub
@Robert: oDocCrl war bei mir schon definiert. nämlich in dem vorherigen funktionierenden Code-Teil.
Auf ein Neues! Jürgen
Re: [gelöst] Zuätzliches Auswahl-Formular sichtbar machen
Verfasst: Fr, 07.09.2012 23:01
von F3K Total
Moin,
wenn Du statt auf das Control aufs Model gehst, kannst Du auch ein unsichtbar gespeichertes Tabellenkontrollfeld mit folgendem Makro sichtbar/unsichtbar machen.
Code: Alles auswählen
sub show_hide_Gridcontrol (event)
ogrid = thiscomponent.drawpage.forms.MainForm.MainForm_Grid
obutton = event.source.model
if obutton.label ="hide" then
ogrid.EnableVisible = false
obutton.label = "show"
else
ogrid.EnableVisible = true
obutton.label = "hide"
endif
end sub
Anbei ein Beispiel
Gruß R
Re: [gelöst] Zuätzliches Auswahl-Formular sichtbar machen
Verfasst: Sa, 08.09.2012 10:35
von juetho
Danke für diese zusätzlichen Hinweise, auch wenn sie ursprünglich nicht zu meinem Problem passten. Model gehört zu Event.Source, aber nicht zu dem Element, das ein-/ausgeblendet werden soll, hilft also beim Umschalten von Visible auf true/false überhaupt nicht. Aber deine Lösung hat mir ein paar Vereinfachungen gebracht:
- Statt über getByName kann man den Namen eines Elements direkt benutzen:
Code: Alles auswählen
'ogrid = thiscomponent.drawpage.forms.getByName("MainForm").getByName("grid")
ogrid = thiscomponent.drawpage.forms.MainForm.grid
- Die Eigenschaft, mit der das Kontrollfeld sichtbar bzw. unsichtbar gesetzt wird, heißt nicht etwa Visible, sondern EnableVisible. Damit wird der Weg über CurrentController/View eingespart. (Allerdings kann das Nebenwirkungen haben, über die ich noch nichts weiß.)
- Dieser Weg funktioniert (wie von dir angegeben) auch dann, wenn das Element im Designer von vornherein als unsichtbar definiert wird; das Verbergen beim Laden des Formulars kann also entfallen.
Gruß Jürgen
Re: [besser (?)] Zuätzliches Auswahl-Formular sichtbar mache
Verfasst: Sa, 08.09.2012 15:58
von F3K Total
juetho hat geschrieben:auch wenn sie ursprünglich nicht zu meinem Problem passten.
Mit Model ist das Grid-Model gemeint!
Das Event.source.model ist das Model des Buttons zum Start des Makros und hat nix mit dem eigentlichen Sinn des Makros, show/hide, zu tun.
Gruß R
Re: [besser (?)] Zuätzliches Auswahl-Formular sichtbar mache
Verfasst: Sa, 08.09.2012 17:01
von juetho
F3K Total hat geschrieben:Mit Model ist das Grid-Model gemeint!
Aber wo wird das Model des Grid verwendet?! Oder wird es von der Eigenschaft EnableVisible benutzt, ohne dass man es direkt sieht? Jürgen
Re: [besser (?)] Zuätzliches Auswahl-Formular sichtbar mache
Verfasst: Sa, 08.09.2012 17:39
von DPunch
Servus
juetho hat geschrieben:Aber wo wird das Model des Grid verwendet?! Oder wird es von der Eigenschaft EnableVisible benutzt, ohne dass man es direkt sieht? Jürgen
Code: Alles auswählen
ogrid = thiscomponent.drawpage.forms.MainForm.MainForm_Grid '<----- GridControlModel
ogrid.EnableVisible = true '<----- GridControlModel
Code: Alles auswählen
grid = thisComponent.drawpage.forms.getByName("MainForm").getByName("frmSucheLkz").getByName ("grid") '<----- GridControlModel
oCtlView = oDocCrl.GetControl(grid) '<----- FmXGridControl
oCtlView.Visible = true '<----- FmXGridControl
Re: [besser (?)] Zuätzliches Auswahl-Formular sichtbar mache
Verfasst: Sa, 08.09.2012 17:47
von juetho
Aha, so ist das. Damit verstehe ich den Hinweis auf das Model, und dieser Weg ist offensichtlich besser. Jürgen