none
Access 2010 - Öffnen eines Fenstern nach Klick auf Tab

    Frage

  • Hallo

    ist es möglich, dass nach Klick auf einen Ribbon-Tab eine Aktion ausgelöst werden kann? Z.B. das Öffnen eines Formulars?


    Liebe Grüße, die Luzie!


    • Bearbeitet Luzie Montag, 26. März 2012 06:55 es geht um Ribbons
    Montag, 26. März 2012 06:23

Antworten

Alle Antworten

  • Hallo!

    Ja, das ist möglich. Da Microsoft leider keine Ereignisse in das Ribbon eingebaut hat (zumindest nicht für Access/VBA), musst du einen Umweg über einen Callback-Aufruf gehen.

    Ein mögliches Vorgehen: In jedem Tab ein unsichtbares Control einbauen (oder einen Callback-Aufruf fürs Tab) und für das Control einen GetVisible-Callback-Aufruf verwenden. Über diesen Aufruf kann man dann entweder direkt das Formular öffnen lassen - oder (wie es mir besser gefällt) ein Ereignis auslösen, dass dann von beliebiger Stelle aus genutzt werden kann. Auf diese Weise baute ich mir EReignisse für die Ribbon in meine Anwendungen ein.

    mfg
    Josef


    Code-Bibliothek für Access-Entwickler
    AccUnit - Testen von Access-Anwendungen
    Virtueller Access-Stammtisch


    Montag, 26. März 2012 08:01
  • Hallo Josef,

    so ganz verstanden habe ich das jetzt glaube ich noch nicht.

    Ich habe jetzt ein Control über das callback GetVisibleLager auf false gesetzt.

    Aber wie lade ich denn das Formular? Mit u.g. Code wird es zwar beim ersten mal geladen, schließe ich es dann und klicke anschließend wieder den Tab "Lager", wird es nicht mehr angezeigt. Ich glaube jetzt nicht, dass die Abfrage in diesem Callback richtig ist. Aber wo kommt das hin?

    Public m_bolLagerVis As Boolean
    
    Public Sub LagerOffen()
        DoCmd.OpenForm "frmLager", acNormal
    End Sub
    
    Sub OnRibbonLoad(ribbon As IRibbonUI)
        ' Callbackname in XML File "onLoad"
    
        Set gobjRibbon = ribbon
        m_bolLagerVis = False   
       
    End Sub
    
    Sub GetVisibleLager(control As IRibbonControl, ByRef visible)
        visible = m_bolLagerVis
        If visible = False Then
            LagerOffen
        End If    
    End Sub


    Liebe Grüße, die Luzie!


    • Bearbeitet Luzie Montag, 26. März 2012 10:16
    Montag, 26. März 2012 10:15
  • Hallo!

    Du musst das Control im Code gleich wieder auf "Invalidate" setzen.

    DeineRibbonUIRefernz.InvalidateControl DeinControlID

    =>

    Sub GetVisibleLager(control As IRibbonControl,ByRef visible)
       visible = false ' Das Control kann unsichtbar bleiben
       LagerOffen
       gobjRibbon.InvalidateControl control.Id  
    End Sub

    mfg
    Josef

    BTW: Sorry, für die schlechte Formatierung im Code, aber ich hab jetzt (nach 3 Versuchen) keine Lust mehr die Anzeige anzupassen.


    Code-Bibliothek für Access-Entwickler
    AccUnit - Testen von Access-Anwendungen
    Virtueller Access-Stammtisch


    Montag, 26. März 2012 10:21
  • Hmmm,

    auch wenn ich das "Invalidate" setze, läd es immer nur beim ersten Mal.

    Ich dachte immer, dass invalidate gesetzt wird, wenn sich der Wert zwischendurch einmal geänadert hat. Das ist aber bei mir nicht der Fall, er bleibt immer false.


    Liebe Grüße, die Luzie!

    Montag, 26. März 2012 10:43
  • Hallo!

    Ich bin mir nicht sicher, aber vielleicht muss das InvalidateControl immer für die anderen Controls in den anderen Tabs erfolgen.

    Also:
    Tab1 wird aktiviert => Form von Tab1 anzeigen und InvalidateControl  auf das Control von Tab2.

    Tab2 wird aktiviert => Form von Tab2 anzeigen und InvalidateControl  auf das Control von Tab1.

    mfg
    Josef


    Code-Bibliothek für Access-Entwickler
    AccUnit - Testen von Access-Anwendungen
    Virtueller Access-Stammtisch

    • Als Antwort markiert Luzie Montag, 26. März 2012 13:32
    Montag, 26. März 2012 10:52
  • Hallo

    ich habe eigentlich nur diese eine Situation, wenn Tab_lager aktiviert wird, soll sich das Formular Lager öffnen. Die anderen Formulare sind immer offen, da braucht es keine Aktivierung durch das Tab. 

    Das Form Lager öffnet sich auch, aber nur beim ersten Mal. Ich habe jetzt alle möglichen Variationen ausgetestet.

    Ein Invalidatecontrol auf die weiteren Tabs ist mir in dieser Situation einfach unklar.

    Ist aber auch jetzt nicht so dramatisch. Ich lege einfach noch einen Button in das Lagercontrol, von wo aus das Formular durch onAction geöffnet wird.

    EDIT: Ich habe gobjRibbon.InvalidateControl "btn_visLagerTrue" noch mit in das Aktivierungsereignis der beiden immer geöffneten Formulare gelegt. So funktionert es jetzt.

    Vielen Dank für die Antworten.


    Liebe Grüße, die Luzie!



    • Bearbeitet Luzie Montag, 26. März 2012 13:32
    Montag, 26. März 2012 13:17