| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: VB.net - iProperties auslesen (2285 mal gelesen)
|
iUser Mitglied
Beiträge: 38 Registriert: 26.11.2013 Inv2k13
|
erstellt am: 26. Nov. 2013 13:19 <-- editieren / zitieren --> Unities abgeben:
Hallo, versuche mich gerade in VB.net/INV. Habe in den iProperties folgenden benutzerdefinierten Text Name: TEST Typ: TEXT WERT: 123456 Wie bekomme ich mit VB.net den WERT in eine Variable? Habe hier schon geblättert, aber leider nichts passendes gefunden, oder vielleicht auch übersehen. danke Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2166 Registriert: 15.11.2006 Windows 10 x64, AIP 2022
|
erstellt am: 26. Nov. 2013 16:28 <-- editieren / zitieren --> Unities abgeben: Nur für iUser
Hallo Indem du eine Variable vom Typ String erstellst und dieser deiniProperty.Value zuweist. Code: Private Sub iProp()Dim sValue as String Dim iProp As Property For Each iProp In myInvApp.ActiveDocument.PropertySets.Item("{D5CDD505-2E9C-101B-9397-08002B2CF9AE}") If iProp.Name = "TEST" Then sValue = iProp.Value End If Next End Sub
------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
iUser Mitglied
Beiträge: 38 Registriert: 26.11.2013 Inv2k13
|
erstellt am: 26. Nov. 2013 22:18 <-- editieren / zitieren --> Unities abgeben:
Danke- Habs aber wohl noch nicht verstanden..... Bin gerade auch erst beim einlesen in VB.net, und bei den ersten kleinen Übungen. Dieser Code will zumindest nicht laufen....aller Anfang ist schwer. Schönen Gruss Code:
Public Class Form1 Dim myInvApp As Inventor.Application Dim oDoc As Inventor.PartDocument Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load iProp() End Sub Private Sub iProp() Dim sValue As String Dim iProp As Property For Each iProp() In myInvApp.ActiveDocument.PropertySets.Item("{D5CDD505-2E9C-101B-9397-08002B2CF9AE}") If iProp.Name = "TEST" Then sValue = iProp.Value lbl_test.Text = sValue End If Next End Sub End Class
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2166 Registriert: 15.11.2006 Windows 10 x64, AIP 2022
|
erstellt am: 26. Nov. 2013 23:19 <-- editieren / zitieren --> Unities abgeben: Nur für iUser
Hallo Du deklarierst zwar myInvApp als Variable, weist ihr aber keinen Wert zu. Es gibt eine brauchbare Funktion über die du das erledigen kannst. Code: Public Class Form1 Dim myInvApp As Inventor.Application Dim oDoc As Inventor.PartDocumentPrivate Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load iProp() End Sub Private Sub iProp() Dim sValue As String Dim iProp As Property If InventorLoad(myInvApp) Is Nothing Then Exit Sub End If For Each iProp() In myInvApp.ActiveDocument.PropertySets.Item("{D5CDD505-2E9C-101B-9397-08002B2CF9AE}") If iProp.Name = "TEST" Then sValue = iProp.Value lbl_test.Text = sValue End If Next End Sub Private Function InventorLoad(ByRef myInventor As Inventor.Application) As Inventor.Application
Try ' Try to get an active instance of Inventor Try myInvApp = System.Runtime.InteropServices.Marshal.GetActiveObject("Inventor.Application") Catch ex As Exception End Try 'Return Nothing ' If not active, create a new Inventor session If myInvApp Is Nothing Then Dim inventorAppType As Type = System.Type.GetTypeFromProgID("Inventor.Application") myInvApp = System.Activator.CreateInstance(inventorAppType) End If myInvApp.Visible = True myInvApp.SilentOperation = True ' Inventor läuft und wir sind verbunden Return myInvApp Catch ex As Exception Return Nothing End Try End Function End Class
Für den Zugriff auf iProperties reicht aber der kleinere, schnellere ApprenticeServer:
Code: Public Class Form1 Dim myInvApp As New Inventor.ApprenticeServerComponent 'Inventor.Application Dim oDoc As Inventor.PartDocumentPrivate Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load iProp() End Sub Private Sub iProp() Dim sValue As String Dim iProp As Property If InventorLoad(myInvApp) Is Nothing Then Exit Sub End If For Each iProp() In myInvApp.ActiveDocument.PropertySets.Item("{D5CDD505-2E9C-101B-9397-08002B2CF9AE}") If iProp.Name = "TEST" Then sValue = iProp.Value lbl_test.Text = sValue End If Next End Sub End Class
------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
iUser Mitglied
Beiträge: 38 Registriert: 26.11.2013 Inv2k13
|
erstellt am: 27. Nov. 2013 08:06 <-- editieren / zitieren --> Unities abgeben:
|
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2166 Registriert: 15.11.2006 Windows 10 x64, AIP 2022
|
erstellt am: 27. Nov. 2013 10:56 <-- editieren / zitieren --> Unities abgeben: Nur für iUser
Moin Code: Dim iProp as Inventor.Property
Die Deklaration als Property ist nicht eindeutig. Auch Dateien im Windows Explorer haben Properties, die aber nix mit Invertor iProps zu tun haben. Die Funktion InventorLoad meckert er an, weil du sie nicht im Code mit drin hast. Logisch oder. Bei Nutzung des ApprenticeServers solltest du die drei Zeilen entfernen. Der dritte Fehler ist ein Folgefehler der fehlgeschlagenen Deklaration von iProp als Property. Ist die Variable iProp nicht deklariert, kann sie auch nicht genutzt werden. Da ist .Net (zum Glück) pingeliger als VBA. ------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
iUser Mitglied
Beiträge: 38 Registriert: 26.11.2013 Inv2k13
|
erstellt am: 29. Nov. 2013 10:02 <-- editieren / zitieren --> Unities abgeben:
|
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2166 Registriert: 15.11.2006 Windows 10 x64, AIP 2022
|
erstellt am: 02. Dez. 2013 16:14 <-- editieren / zitieren --> Unities abgeben: Nur für iUser
Hallo Du hast zwar eine Inventor Apprenticeserverinstanz erzeugt, aber ich sehe nirgends das du auch ein Dokument öffnest. Somit kann der Zugriff auf ActiveDocument nur schief gehen. Aus'n Kopf, daher könnten Fehler drin sein: Code: Public Class Form1 Dim myInvApp As New Inventor.ApprenticeServerComponent 'Inventor.Application 'Dim oDoc As Inventor.PartDocumentPrivate Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load iProp() End Sub Private Sub iProp() Dim sValue As String Dim iProp As Property Dim sFile as String sFile = "vollständiger_Pfad_zu_deiner_Datei" Dim oApprDoc As Inventor.ApprenticeServerDocument oApprDoc = myInvApp.Open(sFile) For Each iProp() In oApprDoc.PropertySets.Item("{D5CDD505-2E9C-101B-9397-08002B2CF9AE}") If iProp.Name = "TEST" Then sValue = iProp.Value lbl_test.Text = sValue End If Next oApprDoc.Close End Sub End Class
------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |