Hallo Andreas, Regina, Thomas, Robert, *,
Roberts Beschreibung ist vielleicht ohne Anschauen des Makros nicht so 
eindeutig: SStrg+Tab funktioniert nicht beim Spung von einem 
Tabellenkontrollelement in einem Formular zu einem anderen Formular 
(zumindest fast nie, ich habe einen Fall, wo das mal geht, den ich 
jedoch nicht - nicht einmal im selben Dokument - reproduzieren kann). Es 
funktioniert aber wohl von einem anderen Kontrollelement, also einzelnes 
Feld, Auswahlliste usw. aus. Und es funktioniert auch bei 
Tabellenkontrollelementen, wenn man das Formulardokument im 
Bearbeitungsmodus geöffnet hat und dann dort den Designmodus 
ausschaltet, aber eben nicht, wenn man das Formular direkt im 
Datenverwaltungsmodus geöffnet hat. Ich will da einen Bug eröffnen.
Roberts Frage zum Testen bezieht sich auf eine verwandtes Thema, und das 
Testprogramm mit dem Springen ist eigentlich nur eine bequemes Mittel, 
das Phänomen zu zeigen: ich hatte versucht, den Formularwechselselbst zu 
programmieren, am liebsten mit Strg+Tab, aber das funktioniert nicht, 
weil erst die LibO-Funktion ausgeführt wird, z.B. von einemEinzelfeld 
aus, und dann erst das Ereignis ausgelöst wird, wobei die Source 
irritierenderweise *das gerade erst angesprungene 
Tabellenkontrollelement* ist. Dabei haben Robert und ich entdeckt, dass 
die Reihenfolge, in der die Elemente der Form durch ElementNames 
geliefert werden, unterschiedlich ist, bei (meinem) Windows 10 genauso 
wie im Navigator, bei Roberts Linux offenbar in umgekehrter Reihenfolge.
Ich bin jetzt - weil Regina in verschiedenen Versionen von LibO 
unterschiedliche Ergebnisse hat - darauf gekommen, mal den Zugriff über 
den Index auszuprobieren, was bei mir zum gleichen Verhalten führt. Um 
das Programm daraufhin umzustellen, muss man nur
 * einmal in firstChild getByName(oForm.elementNames(i)) durch
   oForm.getByIndex(i) ersetzen
 * und zweimal in nextBrother getByName(oParent.ElementNames(i)) durch
   oParent.getByIndex(i)
ersetzen. Hier ist aber auch der gesamte Code zum Reinkopieren:
Sub nextForm (evt as object)
dim oCtrl as object, oForm as object, oController as object
oCtrl = evt.source.Model
oForm = oCtrl.Parent
if evt.Modifiers = com.sun.star.awt.KeyModifier.MOD2 AND evt.KeyCode = 
1027 then
                                                ' = Alt            ' = 
Nach-Rechts
    oController = ThisComponent.getCurrentController()
    firstChild(oForm, oController)
end if
end sub
sub firstChild(oForm as object, oController as object)
dim i as long, elem as object
    for i = 0 to oForm.Count - 1
        elem = oForm.getByIndex(i) 'getByName(oForm.elementNames(i))
        if elem.ServiceName = "stardiv.one.form.component.Form" then
            storeTargetForm = elem.Name
            oController.getFormController(elem).activateFirst
            exit sub
        end if
    next
'        no subform found
    nextBrother(oForm, oController)
End Sub
function nextBrother(oForm as object, oController as object)
'    recursive function, looking for next brother in parent  a f t e r  
oForm
dim oParent as object, i as long, elem as object
dim formFound as boolean
    oParent = oForm.Parent
    formFound = False
    for i = 0 to oParent.Count - 1
        elem = oParent.getByIndex(i) 'getByName(oParent.ElementNames(i))
        if elem.ServiceName = "stardiv.one.form.component.Form" then
            if formFound then
                storeTargetForm = elem.Name
                oController.getFormController(elem).activateFirst
                exit function
            end if
            if oForm.Name = oParent.getByIndex(i).Name then formFound = 
TRUE
        end if
    next
    if oParent.ServiceName = "stardiv.one.form.component.Form" then    
'then the parent of this object is either a form or oDoc.Drawpage.Forms
        nextBrother(oParent, oController)
      else
'        msgbox "letzte Form erreicht"
        firstChild(oParent, oController)    'activate first form on 
highest level
    end if
end function
Wenn Robert und Thomas das mit dem neuen Code noch mal wiederholen 
(evtl. Regina mit der alten Libo-Version) und, wie ich hoffe, alle das 
gleiche Ergebnis kriegen, dann wissen wir, dass auf ElementNames bzgl. 
Reihenfolge kein Verlass ist, aber dass es mit dem Index wohl konsistent 
auf allen BS funktioniert.
Gruß
Gerhard
Am 16.06.2017 um 16:51 schrieb Andreas Säger:
Am 13.06.2017 um 19:52 schrieb Robert Großkopf:
Hallo *,
Gerhard (Weydt) hat beim Navigieren durch ein Formular festgestellt,
dass Sprünge von einem Hauptformular zu einem Unterformular und wieder
zurück häufig über die Tastatur nicht möglich sind. Daraufhin hat er ein
Strg+Tab funktioniert bei mir immer.
--
Liste abmelden mit E-Mail an: discuss+unsubscribe@de.libreoffice.org
Probleme? http://de.libreoffice.org/hilfe-kontakt/mailing-listen/abmeldung-liste/
Tipps zu Listenmails: http://wiki.documentfoundation.org/Netiquette/de
Listenarchiv: http://listarchives.libreoffice.org/de/discuss/
Alle E-Mails an diese Liste werden unlöschbar öffentlich archiviert
Context
- Re: [de-discuss] Navigationsproblem in Formulare - Tester gesucht (continued)
 
  Privacy Policy |
  
Impressum (Legal Info) |
  
Copyright information: Unless otherwise specified, all text and images
  on this website are licensed under the
  
Creative Commons Attribution-Share Alike 3.0 License.
  This does not include the source code of LibreOffice, which is
  licensed under the Mozilla Public License (
MPLv2).
  "LibreOffice" and "The Document Foundation" are
  registered trademarks of their corresponding registered owners or are
  in actual use as trademarks in one or more countries. Their respective
  logos and icons are also subject to international copyright laws. Use
  thereof is explained in our 
trademark policy.