Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  Inventor .NET
  zweites Panel in RibbonTab erstellen schlägt fehl

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:   zweites Panel in RibbonTab erstellen schlägt fehl (90 mal gelesen)
EIBe 3D
Mitglied
Dipl. - Ing. (FH)


Sehen Sie sich das Profil von EIBe 3D an!   Senden Sie eine Private Message an EIBe 3D  Schreiben Sie einen Gästebucheintrag für EIBe 3D

Beiträge: 92
Registriert: 24.01.2020

HP Z4 G4 Workstation
Xeon 3,6 32GB
Nvidia P2000
WIN10
SW2015 SP5.0
SW2017
*************
Inv2018 akt.SP

erstellt am: 16. Okt. 2020 08:51    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo zusammen,

vielleicht kann mir jemand erklären wo mein Fehler liegt, bzw. mich in die richtige Richtung stupsen.

Ich nutze das Nifty Add-In Template von Brian Ekins um Tools in Inventor einzubinden.

Klappt soweit auch erstmal gut, ich erstelle ein RibbonTab z.B. in der "Parts"-Enviroment darin ein Panel und füge dem Panel einen Button hinzu.


Folgende Fehlereinkreisung:

Möchte ich nun ein weiteres Panel mit einem neuen Button in den RibbonTab einfügen, tuts nicht.

Möchte ich in das bereits vorhandene Panel den neuen Button einfügen, tuts nicht.

Nehme ich jeweils bei Panelerstellung und Buttonerstellung die Sicherheits If-Abfrage raus, kann ich sowohl ein neues Panel mit neuem Button erstellen, als auch den neuen Button im vorhandenen Panel erstellen.

Definitv scheint es wohl am If Panel / Button Is Nothing zu hängen, wobei genau die selbe Abfrage eine Zeile darüber funktioniert 


Hier der Codeausschnitt:

Code:

' Toolbox als RibbonTabs deklarieren
            Dim Tab_TB_Drw As RibbonTab
            Dim Tab_TB_ZroDoc As RibbonTab

            ' Get the drawing ribbon.
            Dim drwRibbon As Ribbon = g_inventorApplication.UserInterfaceManager.Ribbons.Item("Drawing")

            ' Get the ZeroDoc ribbon.
            Dim ZeroDocRibbon As Ribbon = g_inventorApplication.UserInterfaceManager.Ribbons.Item("ZeroDoc")

            'Create New RibbonTab in DrawingRibbon
            Tab_TB_Drw = drwRibbon.RibbonTabs.Add("Toolbox", "xx_TB", g_addInClientID)

            'Create New RibbonTab in ZeroDocRibbon
            Tab_TB_ZroDoc = ZeroDocRibbon.RibbonTabs.Add("Toolbox", "xx_TB", g_addInClientID)


            ' Check to see if the panel already exists and create it if it doesn't.
            Dim DrwToolsAnsicht_01 As RibbonPanel = Nothing
            Dim DrwToolsBOM_01 As RibbonPanel = Nothing
            Dim ZeroDocTools_01 As RibbonPanel = Nothing

            Try
                DrwToolsAnsicht_01 = Tab_TB_Drw.RibbonPanels.Item("DrwToolsAnsicht_01")
                DrwToolsBOM_01 = Tab_TB_Drw.RibbonPanels.Item("DrwToolsBOM_01")
                ZeroDocTools_01 = Tab_TB_ZroDoc.RibbonPanels.Item("ZeroDocTools_01")
            Catch ex1 As Exception
            End Try

            ' Create a new panels.
            'in DrawingTools
            If DrwToolsAnsicht_01 Is Nothing Then
                DrwToolsAnsicht_01 = Tab_TB_Drw.RibbonPanels.Add("Effizienztools", "DrwToolsAnsicht_01", g_addInClientID)
            ElseIf DrwToolsBOM_01 Is Nothing Then
                DrwToolsBOM_01 = Tab_TB_Drw.RibbonPanels.Add("Stuecklisten", "DrwToolsBOM_01", g_addInClientID) ', "DrwToolsAnsicht_01", False)
            'in  ZeroDocTools
            ElseIf ZeroDocTools_01 Is Nothing Then
                ZeroDocTools_01 = Tab_TB_ZroDoc.RibbonPanels.Add("Verschiedene Tools", "ZeroDocTools_01", g_addInClientID)
            End If

            ' Add buttons to Drawing Tools
            If Not m_Iso_Ansicht_ausrichten_btn Is Nothing Then
                DrwToolsAnsicht_01.CommandControls.AddButton(m_Iso_Ansicht_ausrichten_btn, False)
            End If

            'If Not m_BOM_Ueber_Schriftfeld_positionieren_btn Is Nothing Then '!!!!! Kein Einfügen bei Abfrage auch wenn in vorhandenes Panel DrwToolsAnsicht_01 erstellt werden soll
DrwToolsBOM_01.CommandControls.AddButton(m_BOM_Ueber_Schriftfeld_positionieren_btn, False) 'Fehler beim einfügen in Panel DrwToolsBOM_01
DrwToolsAnsicht_01.CommandControls.AddButton(m_BOM_Ueber_Schriftfeld_positionieren_btn, False) 'Funktioniert wenn keine Abfrage vorgeschaltet ist
'End If

'If Not m_Klammermasz_umschalten_btn Is Nothing Then
DrwToolsAnsicht_01.CommandControls.AddButton(m_Klammermasz_umschalten_btn, False) 'Funktioniert wenn keine Abfrage vorgeschaltet ist
            'End If
        End Sub


Achja, Inventor 2018, VisualStudio 2019 Community, VB.net netFW 4.5

Vielen Dank schon mal für eure Mühen

EIBe 3D

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

rkauskh
Moderator
Dipl.-Ing. (FH) Versorgungstechnik


Sehen Sie sich das Profil von rkauskh an!   Senden Sie eine Private Message an rkauskh  Schreiben Sie einen Gästebucheintrag für rkauskh

Beiträge: 1650
Registriert: 15.11.2006

Windows 10 x64, AIP 2021

erstellt am: 17. Okt. 2020 16:44    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für EIBe 3D 10 Unities + Antwort hilfreich

Hallo

Ich denke mit dem Teil deines Codes solltest du anfangen:

Code:

Try
      DrwToolsAnsicht_01 = Tab_TB_Drw.RibbonPanels.Item("DrwToolsAnsicht_01")
      DrwToolsBOM_01 = Tab_TB_Drw.RibbonPanels.Item("DrwToolsBOM_01")
      ZeroDocTools_01 = Tab_TB_ZroDoc.RibbonPanels.Item("ZeroDocTools_01")
Catch ex1 As Exception
End Try

Schlägt das Zuweisen von Tab_TB_Drw.RibbonPanels.Item("DrwToolsAnsicht_01") zu DrwToolsAnsicht_01 fehl, bleiben alle drei Variablen auf Nothing. Das ist sicher nicht das beabsichtigte Verhalten. Existieren die anderen beiden Tabs aber bereits, dürfte der nachfolgende Add-Befehl fehlschlagen bzw. einfach nicht ausgeführt werden. Die Buttons dann in "Nothing" einfügen kann nicht funktionieren.
Try-Catch nicht zum stummen Wegfangen von Fehlern benutzen.
Lass das mal schrittweise im Debugger laufen. Du wirst sehen das einige Variablen unerwartet auf Nothing stehen wenn's kracht.

------------------
MfG
Ralf

RKW Solutions GmbH
www.RKW-Solutions.com

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

EIBe 3D
Mitglied
Dipl. - Ing. (FH)


Sehen Sie sich das Profil von EIBe 3D an!   Senden Sie eine Private Message an EIBe 3D  Schreiben Sie einen Gästebucheintrag für EIBe 3D

Beiträge: 92
Registriert: 24.01.2020

HP Z4 G4 Workstation
Xeon 3,6 32GB
Nvidia P2000
WIN10
SW2015 SP5.0
SW2017
*************
Inv2018 akt.SP

erstellt am: 19. Okt. 2020 08:41    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Ralf,

vielen Dank, dort lag der Hund begraben.

Ich habe das Ganze folgendermaßen umgeschrieben, so dass es nun erstmal passt. Ganz zufrieden bin ich jedoch noch nicht.

Code:

        ' This property is provided to allow the AddIn to expose an API of its own to other
        ' programs. Typically, this  would be done by implementing the AddIn's API
        ' interface in a class and returning that class object through this property.
        ' Typically it's not used, like in this case, and returns Nothing.
        Public ReadOnly Property Automation() As Object Implements Inventor.ApplicationAddInServer.Automation
            Get
                Return Nothing
            End Get
        End Property

        ' Note:this method is now obsolete, you should use the
        ' ControlDefinition functionality for implementing commands.
        Public Sub ExecuteCommand(ByVal commandID As Integer) Implements Inventor.ApplicationAddInServer.ExecuteCommand
            ' Not used.
        End Sub

#End Region

#Region "User interface definition"
        ' Adds whatever is needed by this add-in to the user-interface.  This is
        ' called when the add-in loaded and also if the user interface is reset.
        Private Sub AddToUserInterface()
            ' This sample code illustrates creating a button on a new panel of the Tools tab of
            ' the Part ribbon. You'll need to change this to create the UI that your add-in needs.

            ' Toolbox als RibbonTabs deklarieren
            Dim Tab_TB_Drw As RibbonTab
            Dim Tab_TB_ZroDoc As RibbonTab

            ' Get the drawing ribbon.
            Dim drwRibbon As Ribbon = g_inventorApplication.UserInterfaceManager.Ribbons.Item("Drawing")

            ' Get the ZeroDoc ribbon.
            Dim ZeroDocRibbon As Ribbon = g_inventorApplication.UserInterfaceManager.Ribbons.Item("ZeroDoc")

            'Create New RibbonTab in DrawingRibbon
            Tab_TB_Drw = drwRibbon.RibbonTabs.Add(" Toolbox", "_TB", g_addInClientID) '"PROCAD:Profile:RibbonTab", False, False)

            'Create New RibbonTab in ZeroDocRibbon
            Tab_TB_ZroDoc = ZeroDocRibbon.RibbonTabs.Add(" Toolbox", "_TB", g_addInClientID) '"PROCAD:Profile:RibbonTab", False, False)

            ' Get the "Tools" tab.
            'Dim toolsTab As RibbonTab = drwRibbon.RibbonTabs.Item("id_TabTools")

            ' Check to see if the panel already exists and create it if it doesn't.
            Dim DrwToolsAnsicht_01 As RibbonPanel = Nothing
            Dim DrwToolsBOM_01 As RibbonPanel = Nothing
            Dim DrwToolsDIM_01 As RibbonPanel = Nothing

            Dim ZeroDocTools_01 As RibbonPanel = Nothing

            Try
                DrwToolsAnsicht_01 = Tab_TB_Drw.RibbonPanels.Item("DrwToolsAnsicht_01")
            Catch ex1 As Exception
            End Try

            Try
                DrwToolsBOM_01 = Tab_TB_Drw.RibbonPanels.Item("DrwToolsBOM_01")
            Catch ex2 As Exception
            End Try

            Try
                DrwToolsDIM_01 = Tab_TB_Drw.RibbonPanels.Item("DrwToolsDIM_01")
            Catch ex3 As Exception
            End Try

            Try
                ZeroDocTools_01 = Tab_TB_ZroDoc.RibbonPanels.Item("ZeroDocTools_01")
            Catch ex4 As Exception
            End Try

#Region "Create a new panels"
            '********************************
            '* Create a new panels
            '********************************


            'in  DrawingTools
            If DrwToolsAnsicht_01 Is Nothing Then
                DrwToolsAnsicht_01 = Tab_TB_Drw.RibbonPanels.Add("Ansichten", "DrwToolsAnsicht_01", g_addInClientID)
            End If

            If DrwToolsBOM_01 Is Nothing Then
                DrwToolsBOM_01 = Tab_TB_Drw.RibbonPanels.Add("Stuecklisten", "DrwToolsBOM_01", g_addInClientID) ', "DrwToolsAnsicht_01", False)
            End If

            If DrwToolsDIM_01 Is Nothing Then
                DrwToolsDIM_01 = Tab_TB_Drw.RibbonPanels.Add("Maße", "DrwToolsDIM_01", g_addInClientID)
            End If

            'in  ZeroDocTools
            If ZeroDocTools_01 Is Nothing Then
                ZeroDocTools_01 = Tab_TB_ZroDoc.RibbonPanels.Add("Verschiedene Tools", "ZeroDocTools_01", g_addInClientID)
            End If
            '********************************
#End Region

#Region "Add buttons to  Drawíng Tools"
            '********************************
            '* Add buttons to  Drawing Tools
            '********************************

            ' Drawing Tools
            If Not m_Iso_Ansicht_ausrichten_btn Is Nothing Then
                DrwToolsAnsicht_01.CommandControls.AddButton(m_Iso_Ansicht_ausrichten_btn, True)
            End If

            If Not m_BOM_Ueber_Schriftfeld_positionieren_btn Is Nothing Then
                DrwToolsBOM_01.CommandControls.AddButton(m_BOM_Ueber_Schriftfeld_positionieren_btn, True)
            End If

            If Not m_Klammermasz_umschalten_btn Is Nothing Then
                DrwToolsDIM_01.CommandControls.AddButton(m_Klammermasz_umschalten_btn, True)
            End If
            '********************************
#End Region

        End Sub


1. Ich habe jedem Panel eine eigene Try-Catch-Routine spendiert. Klappt soweit, aber wie du schreibst ist das stumme Abfangen nicht so das Wahre. Wie könnte ich den das eleganter lösen?

2. Jeden Panel habe ich eine eigene If Abfrage spendiert, Packe ich das Ganze in eine If-Then-ElseIf Abfrage wird nur das erste Panel erstellt. Gleiches gilt für das Setzen der Buttons. Ich versteh dieses Verhalten nicht. Kann jemand sagen woran das liegt.

3. Wie debugge ich Schrittweise wenn ich eine dll erstelle wofür Inventor geschlossen sein muss und obendrein noch z.B. eine Zeichnung geöffnet sein muss, damit die Panels/Buttons überhaupt erst geladen werden?


Nochmals vielen Dank für die Hilfe


Grüße

EIBe 3D

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

rkauskh
Moderator
Dipl.-Ing. (FH) Versorgungstechnik


Sehen Sie sich das Profil von rkauskh an!   Senden Sie eine Private Message an rkauskh  Schreiben Sie einen Gästebucheintrag für rkauskh

Beiträge: 1650
Registriert: 15.11.2006

Windows 10 x64, AIP 2021

erstellt am: 19. Okt. 2020 10:03    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für EIBe 3D 10 Unities + Antwort hilfreich

Hallo

zu 1.
Eigentlich hast du dir die Frage selbst schon beantwortet. Das was das Programm machen soll, passiert nicht und man sieht nicht warum. Oder, wort case, es kracht scheinabr erst zehn Schritte weiter hinten. Dann sucht man ewig an der falschen Stelle nach dem Fehler. Idealerweise prüft man vorab alle möglichen Fehlerquellen und führt nur nach erfolgreicher Prüfung den Code aus. Soweit die Theorie. Man braucht nur mal beim Inventorstart schauen wieviele Exceptions da geworfen werden. Ich nutze es auf zwei Arten.

Variante 1 - Zum Beispiel Objekt der Variable zuweisen oder Objekt neu erstellen

Code:

Try
  DrwToolsAnsicht_01 = Tab_TB_Drw.RibbonPanels.Item("DrwToolsAnsicht_01")
Catch ex1 As Exception
  DrwToolsAnsicht_01 = Tab_TB_Drw.RibbonPanels.Add("Ansichten", "DrwToolsAnsicht_01", g_addInClientID)
End Try


Problem: Schlägt das neu Erstellen fehl seh ich nix. Das kann man umgehen, indem man das neu Erstellen in eine Funktion auslagert und dort in die Catch-Anweisung eine sinnvolle Fehlermeldung setzt.

Variante 2 - Wenigstens eine halbwegs sinnvolle Fehlermeldung absetzen und sauber aussteigen
Wenn der User einem später wenigstens einen Screenshot der Fehlermeldung schickt, sieht man wo es zum Fehler kam. Alternativ, dem User mit weniger Details belasten und in ein Logfile schreiben.

Code:

Try
  DrwToolsAnsicht_01 = Tab_TB_Drw.RibbonPanels.Item("DrwToolsAnsicht_01")
Catch ex1 As Exception
  MessageBox.Show(ex1.Message)
End Try



zu 2.
Das liegt an der Ablauflogik von ElseIf. Wird die erste If-Bedingung erfüllt, wird Then ausgeführt und Ende. Trifft die erste If-Bedingung nicht zu, geht es zu ElseIf. Trifft ElseIf zu wird das dazugehörende Then ausgeführt usw.
Mach einzelne If-Abfragen daraus.

zu 3.
In den Projekteinstellungen von Visual Studio unter "Debuggen" gibt es en Punkt "Startaktion". Stell den auf "Externes Programm starten" und gib den Pfad zur Inventor.exe an. Du kompilierst deine dll und registrierst sie. Das klappt bereits, sonst würdest du dein AddIn im Inventor nicht sehen. Statt den Inventor selber zu starten, startest du jetzt das Debuggen in Visual Studio (F5). Visual Studio sollte jetzt den Inventor starten. Setze einen Haltepunkt in die Activate-Sub, dann siehst du ob's klappt.

------------------
MfG
Ralf

RKW Solutions GmbH
www.RKW-Solutions.com

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

EIBe 3D
Mitglied
Dipl. - Ing. (FH)


Sehen Sie sich das Profil von EIBe 3D an!   Senden Sie eine Private Message an EIBe 3D  Schreiben Sie einen Gästebucheintrag für EIBe 3D

Beiträge: 92
Registriert: 24.01.2020

HP Z4 G4 Workstation
Xeon 3,6 32GB
Nvidia P2000
WIN10
SW2015 SP5.0
SW2017
*************
Inv2018 akt.SP

erstellt am: 19. Okt. 2020 11:21    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Ralf,

vielen Dank für deine Hilfe und die ausführlichen Erläuterungen. Toll wie man hier "unter die Arme gegriffen bekommt"

Ich werde deine Ratschläge entsprechend umsetzen.

Grüße

EIBe 3D

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2020 CAD.de | Impressum | Datenschutz