| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für NX |
Autor
|
Thema: Mit Winform bestehende Ausdruckswerte ändern (1286 / mal gelesen)
|
Tobias3107 Mitglied Konstrukteur/Anwendungstechnik für Hartmetallwerkzeuge
Beiträge: 32 Registriert: 18.08.2018
|
erstellt am: 07. Okt. 2018 14:44 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich habe mit winforms ein GUI erstellt. Man kann die Länge, Breite, Höhe und per checkbox eine bohrung aktivieren und dessen durchmesser eingeben. Wie kann ich nun den vb code als journal ausführen? Wie übernehme ich die eingegeben Werte der Textboxen in die Ausdrücke in NX? Die Ausdrücke im Teil heißen ebenfalls, Laenge, Breite, Hoehe und Durchmesser. Die Bohrung kann mit 1 und 0 aktiviert werden. d.H. ich muss nur coden das bei den Wert = True der Checkbox eine 1 in den Ausdruck (p109) geschrieben wird. Jedoch hab ich keine Ahnung von den NX Funktionen. Könnte mir jemand hierfür einen Beispiel Code senden? Verwendet wird NX7.5 und NX9 mit WIN10 Code:
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ Partial Class Form1 Inherits System.Windows.Forms.Form 'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen. <System.Diagnostics.DebuggerNonUserCode()> _ Protected Overrides Sub Dispose(ByVal disposing As Boolean) Try If disposing AndAlso components IsNot Nothing Then components.Dispose() End If Finally MyBase.Dispose(disposing) End Try End Sub 'Wird vom Windows Form-Designer benötigt. Private components As System.ComponentModel.IContainer 'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich. 'Das Bearbeiten ist mit dem Windows Form-Designer möglich. 'Das Bearbeiten mit dem Code-Editor ist nicht möglich. <System.Diagnostics.DebuggerStepThrough()> _ Private Sub InitializeComponent() Me.TextBox1 = New System.Windows.Forms.TextBox() Me.TextBox2 = New System.Windows.Forms.TextBox() Me.TextBox3 = New System.Windows.Forms.TextBox() Me.TextBox4 = New System.Windows.Forms.TextBox() Me.Label1 = New System.Windows.Forms.Label() Me.Label2 = New System.Windows.Forms.Label() Me.Label3 = New System.Windows.Forms.Label() Me.Label4 = New System.Windows.Forms.Label() Me.CheckBox1 = New System.Windows.Forms.CheckBox() Me.Button1 = New System.Windows.Forms.Button() Me.Button2 = New System.Windows.Forms.Button() Me.SuspendLayout() ' 'TextBox1 ' Me.TextBox1.Location = New System.Drawing.Point(76, 6) Me.TextBox1.Name = "TextBox1" Me.TextBox1.Size = New System.Drawing.Size(100, 20) Me.TextBox1.TabIndex = 0 ' 'TextBox2 ' Me.TextBox2.Location = New System.Drawing.Point(76, 32) Me.TextBox2.Name = "TextBox2" Me.TextBox2.Size = New System.Drawing.Size(100, 20) Me.TextBox2.TabIndex = 0 ' 'TextBox3 ' Me.TextBox3.Location = New System.Drawing.Point(76, 58) Me.TextBox3.Name = "TextBox3" Me.TextBox3.Size = New System.Drawing.Size(100, 20) Me.TextBox3.TabIndex = 0 ' 'TextBox4 ' Me.TextBox4.Location = New System.Drawing.Point(76, 119) Me.TextBox4.Name = "TextBox4" Me.TextBox4.Size = New System.Drawing.Size(100, 20) Me.TextBox4.TabIndex = 0 ' 'Label1 ' Me.Label1.AutoSize = True Me.Label1.Location = New System.Drawing.Point(31, 9) Me.Label1.Name = "Label1" Me.Label1.Size = New System.Drawing.Size(43, 13) Me.Label1.TabIndex = 1 Me.Label1.Text = "Laenge" ' 'Label2 ' Me.Label2.AutoSize = True Me.Label2.Location = New System.Drawing.Point(31, 35) Me.Label2.Name = "Label2" Me.Label2.Size = New System.Drawing.Size(34, 13) Me.Label2.TabIndex = 1 Me.Label2.Text = "Breite" ' 'Label3 ' Me.Label3.AutoSize = True Me.Label3.Location = New System.Drawing.Point(31, 61) Me.Label3.Name = "Label3" Me.Label3.Size = New System.Drawing.Size(33, 13) Me.Label3.TabIndex = 1 Me.Label3.Text = "Höhe" ' 'Label4 ' Me.Label4.AutoSize = True Me.Label4.Location = New System.Drawing.Point(1, 122) Me.Label4.Name = "Label4" Me.Label4.Size = New System.Drawing.Size(69, 13) Me.Label4.TabIndex = 1 Me.Label4.Text = "Durchmesser" ' 'CheckBox1 ' Me.CheckBox1.AutoSize = True Me.CheckBox1.Location = New System.Drawing.Point(76, 93) Me.CheckBox1.Name = "CheckBox1" Me.CheckBox1.Size = New System.Drawing.Size(120, 17) Me.CheckBox1.TabIndex = 2 Me.CheckBox1.Text = "Bohrung vorhanden" Me.CheckBox1.UseVisualStyleBackColor = True ' 'Button1 ' Me.Button1.Location = New System.Drawing.Point(101, 0) Me.Button1.Name = "Button1" Me.Button1.Size = New System.Drawing.Size(8, 8) Me.Button1.TabIndex = 3 Me.Button1.Text = "Button1" Me.Button1.UseVisualStyleBackColor = True ' 'Button2 ' Me.Button2.Location = New System.Drawing.Point(101, 168) Me.Button2.Name = "Button2" Me.Button2.Size = New System.Drawing.Size(75, 23) Me.Button2.TabIndex = 4 Me.Button2.Text = "Generieren" Me.Button2.UseVisualStyleBackColor = True ' 'Form1 ' Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font Me.ClientSize = New System.Drawing.Size(251, 237) Me.Controls.Add(Me.Button2) Me.Controls.Add(Me.Button1) Me.Controls.Add(Me.CheckBox1) Me.Controls.Add(Me.Label4) Me.Controls.Add(Me.Label3) Me.Controls.Add(Me.Label2) Me.Controls.Add(Me.Label1) Me.Controls.Add(Me.TextBox4) Me.Controls.Add(Me.TextBox3) Me.Controls.Add(Me.TextBox2) Me.Controls.Add(Me.TextBox1) Me.Name = "Form1" Me.Text = "Form1" Me.ResumeLayout(False) Me.PerformLayout() End Sub Friend WithEvents TextBox1 As TextBox Friend WithEvents TextBox2 As TextBox Friend WithEvents TextBox3 As TextBox Friend WithEvents TextBox4 As TextBox Friend WithEvents Label1 As Label Friend WithEvents Label2 As Label Friend WithEvents Label3 As Label Friend WithEvents Label4 As Label Friend WithEvents CheckBox1 As CheckBox Friend WithEvents Button1 As Button Friend WithEvents Button2 As Button End Class
ich hoffe ihr könnt mir helfen
mit freundlichen Grüßen Tobias [Diese Nachricht wurde von Tobias3107 am 07. Okt. 2018 editiert.] [Diese Nachricht wurde von Tobias3107 am 07. Okt. 2018 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Poseida Mitglied Maschinebautechniker, Konstrukteur
Beiträge: 94 Registriert: 15.12.2010 Moldex 3D R13 NX 10 TC 11
|
erstellt am: 08. Okt. 2018 07:40 <-- editieren / zitieren --> Unities abgeben: Nur für Tobias3107
Hallo, zeichne ein Journal in NX auf und übergebe dann die Werte von deiner Form. Hier mal ein schnelles Beispiel.
Code: Imports System Imports NXOpen Imports NXOpenUI Imports NXOpen.UF Imports NXOpen.Utilities Module Test
Public sess As Session = Session.GetSession Sub Main() Dim wp As Part = sess.Parts.Work Dim UndoM As Session.UndoMarkId = sess.SetUndoMark(Session.MarkVisibility.Visible, "-") Dim MForm As New Form1 MForm.ShowDialog() End Sub
Sub LW(Message As String) sess.ListingWindow.Open() sess.ListingWindow.WriteLine(Message) End Sub End Module
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> Partial Class Form1 Inherits System.Windows.Forms.Form 'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen. <System.Diagnostics.DebuggerNonUserCode()> Protected Overrides Sub Dispose(ByVal disposing As Boolean) Try If disposing AndAlso components IsNot Nothing Then components.Dispose() End If Finally MyBase.Dispose(disposing) End Try End Sub 'Wird vom Windows Form-Designer benötigt. Private components As System.ComponentModel.IContainer 'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich. 'Das Bearbeiten ist mit dem Windows Form-Designer möglich. 'Das Bearbeiten mit dem Code-Editor ist nicht möglich. <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent() Me.CheckBox1 = New System.Windows.Forms.CheckBox() Me.SuspendLayout() ' 'CheckBox1 ' Me.CheckBox1.AutoSize = True Me.CheckBox1.Location = New System.Drawing.Point(46, 26) Me.CheckBox1.Name = "CheckBox1" Me.CheckBox1.Size = New System.Drawing.Size(81, 17) Me.CheckBox1.TabIndex = 0 Me.CheckBox1.Text = "CheckBox1" Me.CheckBox1.UseVisualStyleBackColor = True ' 'Form1 ' Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font Me.ClientSize = New System.Drawing.Size(284, 262) Me.Controls.Add(Me.CheckBox1) Me.Name = "Form1" Me.Text = "Form1" Me.ResumeLayout(False) Me.PerformLayout() End Sub Friend WithEvents CheckBox1 As System.Windows.Forms.CheckBox Private Sub CheckBox1_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox1.CheckedChanged If CheckBox1.Checked Then Dim expression1 As NXOpen.Expression = CType(sess.Parts.Work.Expressions.FindObject("MeinExp"), NXOpen.Expression) Dim unit1 As NXOpen.Unit = CType(sess.Parts.Work.UnitCollection.FindObject("MilliMeter"), NXOpen.Unit) sess.Parts.Work.Expressions.EditWithUnits(expression1, unit1, "0") End If End Sub End Class
------------------ Benjamin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Tobias3107 Mitglied Konstrukteur/Anwendungstechnik für Hartmetallwerkzeuge
Beiträge: 32 Registriert: 18.08.2018
|
erstellt am: 08. Okt. 2018 16:23 <-- editieren / zitieren --> Unities abgeben:
Danke für die schnelle Antwort! Habs hinbekommen Weißt du zufällig ob es auch möglich ist, die eingegeben Werte automatisch nach Excel/Access zu exportieren? Um zum Beispiel später, die verschiedenen Maße vergleichen zu können oder Statistiken zu ziehen? Und gibt es eine Möglichkeit die Bilder für die PictureBox ohne festen Pfad zu importieren? Damit ich beispielsweise die Bilder verschieben kann und trotzdem die Bilder angezeigt werden? Vielleicht könnte man ja die Bilder aus einer Exceltabelle auslesen? Da es sowieso geplant wäre via Button die Maße in Excel zu übertragen. Somit müsste nur die .vb und die Excel-Datei weitergegeben werden. Gibt es eine Umgebungsvariable für den aktuellen Speicherpfad des aktuell geöffneten Bauteils? lg [Diese Nachricht wurde von Tobias3107 am 08. Okt. 2018 editiert.] [Diese Nachricht wurde von Tobias3107 am 08. Okt. 2018 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Poseida Mitglied Maschinebautechniker, Konstrukteur
Beiträge: 94 Registriert: 15.12.2010 Moldex 3D R13 NX 10 TC 11
|
erstellt am: 09. Okt. 2018 07:36 <-- editieren / zitieren --> Unities abgeben: Nur für Tobias3107
|
| Technische/r Projektleiter/in (m/w/d) im Veranstaltungsmanagement | Das World Conference Center Bonn ist mit einer Kapazität von 7.000 Personen eines der größten Kongresszentren Deutschlands. Im ehemaligen Plenarsaal des Deutschen Bundestages und im Hauptgebäude führen unsere zahlreichen Kunden aus Politik, Wirtschaft, Wissenschaft, von Verbänden oder internationalen Organisationen unterschiedlichste Veranstaltungen wie Jahrestagungen, Betriebsversammlungen, Produktvorstellungen, Kongresse oder Hauptversammlungen durch.... | Anzeige ansehen | Weitere: Führungskräfte |
|
Tobias3107 Mitglied Konstrukteur/Anwendungstechnik für Hartmetallwerkzeuge
Beiträge: 32 Registriert: 18.08.2018
|
erstellt am: 09. Okt. 2018 21:43 <-- editieren / zitieren --> Unities abgeben:
Hallo, danke für deine Hilfe! Hat nun alles soweit geklappt! Mit folgenden Code habe ich den Pfad als Variable, und der Excelexport funktioniert auch super! Zwecks der Frage zu den Bildern: ich suche noch nach einer Möglichkeit die Bilder fest in NX zu importieren o.Ä. um später eventuelle Anzeigefehler zu vermeiden, falls jemand ein Bild verschiebt. Die Bilder haben ja einen festen Speicherpfad im Code, wie z.B. hier: Code:
'PictureBox1 ' Dim pfad2 As String = IO.Path.GetDirectoryName(workPart.FullPath) Me.PictureBox1.ImageLocation = pfad2 + "\Bilder_Zeichnung\Nuten.jpg" Me.PictureBox1.Location = New System.Drawing.Point(523, 35) Me.PictureBox1.Name = "PictureBox1" Me.PictureBox1.Size = New System.Drawing.Size(215, 194) Me.PictureBox1.TabIndex = 1 Me.PictureBox1.TabStop = False
Aber ich denke, wir werden dies so umsetzen, dass die Bilder fest im Firmenpool abgespeichert werden, und administrativ Schreibrechte auf den Ordner gesetzt werden.
Code:
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click Dim theSession As NXOpen.Session = NXOpen.Session.GetSession() Dim workPart As NXOpen.Part = theSession.Parts.Work Dim pfad2 As String = IO.Path.GetDirectoryName(workPart.FullPath)Dim oExcel As Object Dim oBook As Object Dim oSheet As Object Dim I As Integer = 2 oExcel = CreateObject("Excel.Application") oBook = oExcel.Workbooks.Add oSheet = oBook.Worksheets(1) oSheet.Range("A1").Value = Textbox1.Text oSheet.Range("B1").Value = "Hauptmaß" oSheet.Range("C1").Value = "Nebenmaß" oSheet.Range("D1").Value = "Untere Tol" oSheet.Range("E1").Value = "Obere Tol" oSheet.Range("F1").Value = "Typ" oSheet.Range("A1:F1").Font.Bold = True oBook.SaveAs(pfad2 & "\Book1.xls") oSheet = Nothing oBook = Nothing oExcel.Quit() oExcel = Nothing End Sub
Nur noch eine Frage zum Excelcode. Im Moment werden mit diesen Code bestimmte Werte auf feste Zellen geschrieben. Zum einen müsste aus den "oBook.SaveAs(pfad2 & "\Book1.xls")" ein normales "speichern" anstatt "SaveAs" gemacht werden. Einfaches weglassen von "As" funktioniert leider nicht. Wäre es theoretisch auch möglich die Zellen variable zu machen, um die Werte immer in die erte freie Zeilen zu schreiben? in VBA würde dies folgendermaßen aussehen:
Code:
Dim lrow As Long lrow = 2 'Start in Zeile 2, Zeile 1 sind ja die Überschriftrn 'Schleife solange etwas in der ersten Spalte in sheet 1 drin steht Do While Trim(CStr(Sheet1.Cells(lrow, 1).Value)) <> "" lrow = lrow + 1 'Nächste row bearbeiten Loop
Danke bis jetzt! hat mir richtig geholfen! mit freundlichen Grüßen Tobias Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|