Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  Inventor .NET
  Parameter Abfangen

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
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  Parameter Abfangen (810 mal gelesen)
Rodario7
Mitglied
Maschinenbautechniker


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

Beiträge: 85
Registriert: 08.02.2013

Windows 7 64bit
Inventor 2013
Visual Basic 2010 Express

erstellt am: 09. Okt. 2014 13:05    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,
ich habe mal eine Frage:
Ich möchte vor dem Deklarieren eines Parameters erst mal in die Datei(ipt) schauen um nachzusehen ob der Parameter überhaupt vorhanden ist.
Mein bisheriger Versuch sieht so aus :
Code:

Dim oInventorApp As Inventor.Application
        oInventorApp = CType(GetObject(, "Inventor.Application"), Application)
Dim oDocOpen As Inventor.PartDocument
Dim oParameters As Inventor.Parameters
            oParameters = oDocOpen.ComponentDefinition.Parameters
For Each para As Parameter In oParameters
              
                If not oParameters.Item("Bauart") Is Nothing Then
                    dim ParaBauart As Parameter = oParameters.Item("Bauart")
                    Dim Str As String = ParaBauart.Expression
                    Str = Str.Remove(Str.Length - 3, 3)
                    If CInt(Str) <> 2 Then                   
                    Exit Sub
                    Else
                      tuwas
                    End If

                End If

            Next



Bei der Zeile
Code:
If not oParameters.Item("Bauart") Is Nothing

steigt des Proggi aus und sagt mir : falscher Parameter

irgendwer ne Ahnung wie ich das hinkriege?

------------------
Gruß
Klaus

[Diese Nachricht wurde von Rodario7 am 09. Okt. 2014 editiert.]

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: 2166
Registriert: 15.11.2006

Windows 10 x64, AIP 2022

erstellt am: 09. Okt. 2014 19:53    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 Rodario7 10 Unities + Antwort hilfreich

Hallo

Schau dir mal die Try-Catch-Anweisung an. Damit kann man sehr einfach beide Möglichkeiten abdecken.
Man probiert in der Try-Anweisung einfach den Parameter abzufragen. Existiert der Parameter nicht, löst das einen Ausnahmefehler aus, den Catch "einfängt" und die Möglichkeit zum Behandeln des Fehlers bietet. Wir "behandeln" den Fehler "Parameter gibt's noch nicht" mit "tu was".
Sieht im Prinzip so aus:

Code:

Try
'hier dein Code zum Abfragen des Parameters
Catch ex as Exception
'hier dein Code zum tu was
End Try

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

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

Rodario7
Mitglied
Maschinenbautechniker


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

Beiträge: 85
Registriert: 08.02.2013

Windows 7 64bit
Inventor 2013
Visual Basic 2010 Express

erstellt am: 15. Okt. 2014 21:47    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

Hi und sy dass ich jetzt erst antworte.
Mir ist bewusst dass ich den Fehler mit try-catch abfangen kann.
Da in einem Code aber mehr Fehler stecken können als nur der dass der
Parameter nicht da ist kann das verwirren.
Ich möchte den Fehler tatsächlich sauber abfangen.
Geht das irgendwie?

------------------
Gruß
Klaus

[Diese Nachricht wurde von Rodario7 am 15. Okt. 2014 editiert.]

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

daywa1k3r
Moderator
Softwareentwickler




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

Beiträge: 3497
Registriert: 01.08.2002

Desktop: 3.3GHz;8GB;SSD OCZ Vertex 3;Gainward Phantom GTX570
Laptop: Alienware m17x
Win7, Inventor2012

erstellt am: 15. Okt. 2014 22:55    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 Rodario7 10 Unities + Antwort hilfreich

Ändere das:

Code:

If not oParameters.Item("Bauart") Is Nothing Then

in das:

Code:

If para.Name == "Bauart" Then

Du läufst doch durch alle Parameter mit deiner ForEach, und in jedem Durchlauf versuchst du über den Namen "Bauart" auf die Parameters Collection zuzugreifen. Doppelt gemoppelt.

------------------
Grüße Igor

FX64 Software Solutions - Inventor Tools
FX64 LambdaSpect - Lichtsimulation mit Autodesk Inventor

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

Rodario7
Mitglied
Maschinenbautechniker


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

Beiträge: 85
Registriert: 08.02.2013

Windows 7 64bit
Inventor 2013
Visual Basic 2010 Express

erstellt am: 16. Okt. 2014 08:13    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

Den Code so :

Code:
      Dim bol As Boolean 'Wenn parameter vorhanden dann true
            For Each para As Parameter In oParameters
                If para.Name = "Bauart" Then
                    bol = True
              else
                    bol=false
            Next
            If bol = False Then
                MsgBox("Nicht da")
            Else
                MsgBox("Ist da")
                Exit Sub
            End If

kann ich offenbar nicht ausführen.
Dafür müsste der Parameter Bauart der letzte Parameter der Inventor Datei sein, da die Variable "bol" sonst immer überschrieben wird.
Wie kann ich denn eine verbünftige Fehlermeldung aufbauen?

------------------
Gruß
Klaus

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

Rodario7
Mitglied
Maschinenbautechniker


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

Beiträge: 85
Registriert: 08.02.2013

Windows 7 64bit
Inventor 2013
Visual Basic 2010 Express

erstellt am: 16. Okt. 2014 08:18    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

Muhaha... 1 Minute nach meinem letztem Post kams mir in den Sinn

Code:
Dim bol As Boolean 'Wenn parameter vorhanden dann true
            For Each para As Parameter In oParameters
                If para.Name = "Bauart" Then
                    bol = True
            Exit for
              else
                    bol=false
            Next
            If bol = False Then
                MsgBox("Nicht da")
            Else
                MsgBox("Ist da")
                Exit Sub
            End If

Das Exit for fehlte ...
Danke jedenfalls für die Denkanstösse

------------------
Gruß
Klaus

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: 2166
Registriert: 15.11.2006

Windows 10 x64, AIP 2022

erstellt am: 16. Okt. 2014 19:42    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 Rodario7 10 Unities + Antwort hilfreich

Hallo

Ich hätte halt nicht den gesamten Code, sondern speziell nur den Schnipsel mit der Parameterprüfung da reingepackt. Dafür wäre das for each weggefallen. Zumindest wenn man erstmal ein paar tausend Parameter mit for each durchläuft ist Try-Catch schneller. 
Ich klammere aus Prinzip jede Sub und Funktion in ein Try Catch, egal ob theoretisch kein Fehler auftreten kann oder nicht. In den Catch Zweig setze ich eine MessageBox mit dem Ausnahmefehler. Wenn einer meiner User es fertig bringt an meiner göttlichen Unfehlbarkeit zu kratzen und mir so eine Fehlermeldung präsentiert, hab ich schonmal einen Hinweis was wo schief gegangen ist. Außerdem kann man so in Unterfunktionen sauber aussteigen und reicht den Fehler im Code nicht bis an die Stelle weiter an der Autodesk zum Abschied sein Tschuldigung-Fensterchen einblendet.

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

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

daywa1k3r
Moderator
Softwareentwickler




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

Beiträge: 3497
Registriert: 01.08.2002

Desktop: 3.3GHz;8GB;SSD OCZ Vertex 3;Gainward Phantom GTX570
Laptop: Alienware m17x
Win7, Inventor2012

erstellt am: 16. Okt. 2014 22:57    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 Rodario7 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von rkauskh:
Hallo
... Zumindest wenn man erstmal ein paar tausend Parameter mit for each durchläuft ist Try-Catch schneller.  ...

Allerdings bewirkt im aktuellen Fall eine Exit For einen sofortigen Ausstieg aus der ForEach sobald der Parameter gefunden wurde. Und es wird keine Ausnahme ausgelöst.    

Zitat:

Ich klammere aus Prinzip jede Sub und Funktion in ein Try Catch, egal ob theoretisch kein Fehler auftreten kann oder nicht.

Bedenke, dass eine Try Catch immer viel mehr Zeit für die Ausführung benötigt als der Code den man einfach so laufen lassen kann, ohne dem Fangnetz.

Zitat:

...Wenn einer meiner User es fertig bringt an meiner göttlichen Unfehlbarkeit zu kratzen und mir so eine Fehlermeldung präsentiert...

Hahaha Der war gut    

BTW. Danke Rodario für die 8 Unities. Die sind jetzt wieder rund  

------------------
Grüße Igor

FX64 Software Solutions - Inventor Tools
FX64 LambdaSpect - Lichtsimulation mit Autodesk Inventor

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: 2166
Registriert: 15.11.2006

Windows 10 x64, AIP 2022

erstellt am: 16. Okt. 2014 23:20    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 Rodario7 10 Unities + Antwort hilfreich

Hallo

Deswegen sollte auch im Try direkt versucht werden auf den Parameter zuzugreifen, so daß er entweder gefunden und bearbeitet wird oder wenn er nicht gefunden wird, eine Ausnahme auslöst, in Catch springt und dort den Parameter erstellt. For each wäre dann gar nicht erforderlich.

Stimmt, Try-Catch ist langsamer als ohne. Aber ein Inventorabsturz aufgrund einer nicht abgefangenen Ausnahme inklusive der Wiederherstellung der leider nicht mehr gespeicherten Arbeit des Users könnte noch länger dauern. 

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

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

daywa1k3r
Moderator
Softwareentwickler




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

Beiträge: 3497
Registriert: 01.08.2002

Desktop: 3.3GHz;8GB;SSD OCZ Vertex 3;Gainward Phantom GTX570
Laptop: Alienware m17x
Win7, Inventor2012

erstellt am: 16. Okt. 2014 23:27    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 Rodario7 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von rkauskh:
Hallo

Deswegen sollte auch im Try direkt versucht werden auf den Parameter zuzugreifen, so daß er entweder gefunden und bearbeitet wird oder wenn er nicht gefunden wird, eine Ausnahme auslöst, in Catch springt und dort den Parameter erstellt. For each wäre dann gar nicht erforderlich.


Ah das stimmt. Das erste war ja doppelt gemoppelt (foreach und collection). Es ist zwar abhängig von den Anzahl der Parameter, aber in der Regel dürfte die TryCatch mit dem Zugriff auf die Collection schneller sein. Hast Recht.


------------------
Grüße Igor

FX64 Software Solutions - Inventor Tools
FX64 LambdaSpect - Lichtsimulation mit Autodesk Inventor

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

Rodario7
Mitglied
Maschinenbautechniker


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

Beiträge: 85
Registriert: 08.02.2013

Windows 7 64bit
Inventor 2013
Visual Basic 2010 Express

erstellt am: 19. Okt. 2014 14:17    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

Zitat:
Original erstellt von daywa1k3r:

Hahaha Der war gut     

BTW. Danke Rodario für die 8 Unities. Die sind jetzt wieder rund   



Keine Ahnung was du damit meinst.

------------------
Gruß
Klaus

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)2023 CAD.de | Impressum | Datenschutz