Tab im Ribbon "ausblenden"

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 16 Antworten in diesem Thema. Der letzte Beitrag () ist von DrZwockel.

    Tab im Ribbon "ausblenden"

    Hallo,

    ich habe wieder einmal ein kleines Problem, bei dem mi Tante Google nicht weiterhelfen konnte.

    Ich habe eine XML Ribbon-Datei, in der das Ribbon definiert wird. Jetzt möchte ich beim Start des Ribbons entscheiden, ob ein bestimmtest Tab nicht angezeigt werden soll.

    Leider finde ich keine Lösung bzw. Lösungsansatz die/der beschreibt, wie man dies umsetzt (und jetzt kommt es), wenn dies nicht manuell durch Klick auf eine Schaltfläche passieren soll. Ich finde immer nur Lösungen, bei dem ein ToggleButton die Sichtbarkeit regelt. Ich benötige eine Variante, die beim Start diesen Prozess steuert. In der RibbonDesingnerversion habe ich das bereits mehrfach ohne Probleme umgesetzt. Leider muss in dem vorliegenden Visio AddIn Projekt auf das XML Ribbon zurückgreifen, da ich mit einigen idMSO arbeiten muss ?( .

    Hat jemand eine Idee? Ihr würdet mir wahnsinnig helfen ... :thumbsup:



    Gruß vom Doc
    Huhu.
    Als ich mich damals mit RibbonX beschäftigt habe, hat mir dieses Tutorial alles gegeben was ich brauchte:
    rholtz-office.de/ribbonx/sichtbarkeit-der-elemente
    In der verlinkten Seite sollte alles drin stehen.

    Allerdings verstehe ich nicht ganz:

    DrZwockel schrieb:

    Ich habe eine XML Ribbon-Datei, in der das Ribbon definiert wird. Jetzt möchte ich beim Start des Ribbons entscheiden, ob ein bestimmtest Tab nicht angezeigt werden soll.

    Du kannst ja in der Ribbon.xml keinen Code unterbringen.
    Die Prüfung ob Anzeige ja oder nein, muss doch im Programm / Addin passieren.
    Hallo DerSmurf,

    vielen Dank für die Antwort.

    Ich habe folgende Version gewählt:

    XML-Quellcode

    1. ​<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="onLoad" >
    2. <ribbon>
    3. <tabs>
    4. <tab id="UM2" getVisible="getVisible_UM2" />
    5. </tabs>
    6. </ribbon>
    7. </customUI>



    und als VB Code den folgenden:

    VB.NET-Quellcode

    1. '
    2. Public Sub getVisible_UM2(control As Office.IRibbonControl, ByRef visible As Boolean)
    3. If UCase(Environ("USERNAME")) = "XXXXXXXXX" Then
    4. visible = True
    5. Else
    6. visible = False
    7. End If
    8. End Sub


    Leider erhalte ich immer die Fehlermeldung:
    "Die Rückrufsignaturen stimmen nicht überein "getVisible_UM2"

    Hast Du eine Idee? Steckt der Fehler in einer Kleinigkeit, die ich nicht sehe????



    Gruß vom Doc
    Uff. Das ist bei mir lange, lange her. Daher bin ich mir nicht ganz sicher.
    In der xml fehlt glaube ich bei der Erstellung des Tabs, das Label Attribut. (weiß nicht ob das schlimm ist).
    <tab id="UM2" label="anzuzeigender Name" getVisible="getVisible_UM2" />
    Beim Code muss es glaube ich so sein (hab deinen Code mal auskommentiert und ersetzt.

    Visual Basic-Quellcode

    1. Option Private Module
    2. Option Explicit
    3. Public objRibbon As IRibbonUI
    4. Public Sub onLoad(ribbon As IRibbonUI)
    5. Set objRibbon = ribbon
    6. End Sub
    7. 'Public Sub getVisible_UM2(control As Office.IRibbonControl, ByRef visible As Boolean)
    8. Public Sub getVisible_UM2(control As Office.IRibbonControl, ByRef returnValue)
    9. If UCase(Environ("USERNAME")) = "XXXXXXXXX" Then returnValue = True
    10. 'visible = True
    11. 'Else
    12. 'visible = False
    13. 'End If
    14. End Sub

    Hallo Der Smurf,

    wenn ich nur

    VB.NET-Quellcode

    1. ... ByRef returnValue


    eintrage, dann erhalte ich in Visual Studio die Fehlermeldung:

    Schweregrad Code Beschreibung Projekt Datei Zeile Unterdrückungszustand
    Fehler BC30529 Alle Parameter müssen explizit typisiert sein, wenn einer von ihnen explizit typisiert ist.

    Gruß vom Doc
    @DrZwockel Ja und? Steht doch auskommentiert da.
    Machst Du

    VB.NET-Quellcode

    1. Public Sub getVisible_UM2(control As Office.IRibbonControl, ByRef visible As Boolean)

    ====
    Am besten, Du machst gleich Option Strict On :!:
    Visual Studio - Empfohlene Einstellungen
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „RodFromGermany“ ()

    Hallo RodFromGermany,

    danke für den Eintrag. Genauso habe ich es auch schon ... aber dennoch taucht dieser Fehler auf ...
    "Die Rückrufsignaturen stimmen nicht überein "getVisible_UM2"

    Gruß vom Doc
    @DrZwockel Dann liste mal auf, wo überall das vorkommt. ObjectBrowser und Suche in allen Projekten.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Es kommt in der XML Datei vor:

    XML-Quellcode

    1. <tab id="UM2" label="SPEZIALFUNKTIONEN" getVisible="GetVisible_UM2">
    2. <group id="Zeichnen" label="Zeichnen" >
    3. <button idMso="ZoomFitToWindowVisio" label="ganzes Zeichenblatt"/>
    4. <button idMso="ShapeProtection"/>
    5. ...


    und dann in der Ribbon_UI.vb

    VB.NET-Quellcode

    1. '
    2. Public Sub GetVisible_UM2(ByVal control As Office.IRibbonControl, ByRef returnValue As Boolean)
    3. If UCase(Environ("USERNAME")) = "XXXXX" Then returnValue = True
    4. End Sub


    Ansonsten hat die Suchfunktion "GetVisible_UM2" im ganzen Projekt nicht gefunden.


    Gruß vom Doc
    Hmm.
    Ich habe noch nie mit Visio gearbeitet. Aber gibt es nicht in Visio eine Art "Makro IDE"?
    Habe das ganze jetzt mal mit Excel umgesetzt.
    Wenn in Tabelle1.Range A1 beim Starten des Dokumentes 123 steht, wird der Button im Tab User angezeigt. Wenn nicht, dann halt nicht.
    Ich hab dir die Datei mal angehängt (xlsm im zip).

    Bzgl. deiner Frage, hätte ich dir jetzt auch das gleiche wie @RodFromGermany gesagt.
    Wenn deine IDE den Typ verlangt, gib ihn ihr halt.
    Public Sub getVisible_UM2(control As Office.IRibbonControl, ByRef returnValue as boolean)
    Jedoch würde mir diese Sub in Excel eine "Type Missmatch" Exception schmeißen.
    Aber was soll returnValue sonst sein, außer boolean?
    Vlt. mal Schrittweise durchgehen, vielleicht kannst du ja mit IDE heruasfinden, welcher Typ verlangt wird.

    Edit: In der "IDE", wenn man das überhaupt so nennen kann - von Excel finde ich den Typen von returnValue leider nicht heraus.
    Dateien
    • Mappe1.zip

      (12,45 kB, 73 mal heruntergeladen, zuletzt: )
    Hallo DerSmurf,

    ich habe schon einige Projekte mit Ribbon umgesetzt. In Excel als VBA und XML ... da funktionierte das alles einwandfrei.
    Mit dem VS habe ich ebenfalls schon Excel AddIns in VSTO umgesetzt; hier aber dem dem RibbonDesigner. Das kann man das auch sehr locker handhaben.
    Allerdings in dem Visio Projekt muss ich rein XML bleiben und da zeigen sich die derzeitigen Probleme ||

    Gruß vom Doc
    Probiere es mal hiermit:

    VB.NET-Quellcode

    1. Public Function GetVisible_UM2(ByVal Control As Microsoft.Office.Core.IRibbonControl) as Boolean
    2. return UCase(Environ("USERNAME")) = "XXXXX"
    3. End Function


    Zumindest sieht es so bei mir bei einem VSTO-Projekt (Excel) aus.
    So wie du das aktuell hast wurde es früher in VBA programmiert.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „korni“ ()

    @DrZwockel Oha.
    Ich kenn mich da nicht aus, aber ich denke mal, dass getVisible so was wie ein Interface ist und eine bestimmte Signatur haben muss. :/
    Probierma den anderen Weg:

    VB.NET-Quellcode

    1. Public Sub getVisible_UM2(control, ByRef visible)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hallo Korni,

    das war die Lösung ... funktioniert super ... wielleicht war man doch noch etwas zu sehr in der VBA Ribbon Sache unterwegs ... :whistling:

    Vielen Dank an alle Mitstreiter, die an der Lösung mitgearbeitet haben.


    Gruß vom Doc

    DrZwockel schrieb:

    das war die Lösung ... funktioniert super
    Dann gib @korni doch ein Hilfreich. ;)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!