Showing results for 
Search instead for 
Do you mean 
Reply

Handling .DLX file not found - How to?

To all,

 

is there a way of handling a .dlx file not found when "loading" a GUI

 

Im my Main () I have the following code:

 

Sub Main()
		
 theLW.Open()
'Display the GUI to get user's data
  MyMacro_GUI.Main()
  GetOnWithIt()
		
End sub

and in the Public Class MyMacro_GUI the Sub New() function has the following

 

Public Sub New()
		
Try

 theSession = Session.GetSession()
 theUI = UI.GetUI()
 theDialogName = IO.Path.ChangeExtension(theSession.ExecutingJournal, "dlx")
		
If theDialogName = "" Then
   theDialogName = "MyMacro_GUI.dlx"
Else
 If Not IO.File.Exists(theDialogName) Then
   theDialogName = "MyMacro_GUI.dlx"
 End If
End If
			
theDialog = theUI.CreateDialog(theDialogName)
theDialog.AddApplyHandler(AddressOf apply_cb)
theDialog.AddOkHandler(AddressOf ok_cb)
theDialog.AddUpdateHandler(AddressOf update_cb)
theDialog.AddInitializeHandler(AddressOf initialize_cb)
theDialog.AddFocusNotifyHandler(AddressOf focusNotify_cb)
theDialog.AddKeyboardFocusNotifyHandler(AddressOf keyboardFocusNotify_cb)
theDialog.AddDialogShownHandler(AddressOf dialogShown_cb)
			
 Catch ex As Exception
			
 '---- Enter your exception handling code here -----
'If macro arrives here it means that the dlx file has not been found
theUI.NXMessageBox.Show("Block Styler", NXMessageBox.DialogType.Error, ex.ToString)
Throw ex
'theLw.WriteLine("Error occurred while loading the dedicated GUI")
'theLw.WriteLine("The most likely cause is the .dlx file was not found")
	End Try
End Sub

 

 Is it possible to "return" something to the Main() function (ie the calling function) to handle the error. For example if one could return ex (the thrown error code) then I could "carry on" by going through serie in user input boxes (1 at a time!) to get the input (using NXInputbox). No pretty but it could work.

 

Any help would be very appreciated

 

Thanks

 

Regards

 

JXB

 

Production: NX9.0.3.4, NX10.0.2.6
Development: VB.NET (amateur level !)
6 REPLIES

Re: Handling .DLX file not found - How to?

In VB, a Sub does not return a value, but a Function can do that.

 

(In the Main)

 

        Dim theTest As Exception = returnException()

        If theTest IsNot Nothing Then
            Echo("Exception: " & theTest.Message)
        End If

...

 

Instead of a Sub:


    Function returnException() As Exception

        '... do something in a try/catch

        ' From the Catch block, return the exception

    End Function

Re: Handling .DLX file not found - How to?

In the Catch block, you will see the line:

Throw ex

This will pass the error "up one level" to the sub or function that called the currently executing code, in your case this means the error will show up in Sub Main(). You should wrap the call to MyMacro_GUI.New() in a try block to catch this error. You can then use the exception object's properties (such as .Message) to get more information on what error occurred.

 

Below are a few links that may help:

intro to exception handling

exception class

throw statement

 

Re: Handling .DLX file not found - How to?

Thanks for the info SteveL & Cowski1. Much appreciacted

Does the  Throw ex statment return to the  Public Shared Sub Main() which is defined in Public Class MyMacro_GUI or does it return to Sub Main() defined in the Module? in the module
I have the following;

 

Module MyMacro
Public Dim theSession As Session = Session.GetSession()
Public Dim theUISession As UI = UI.GetUI
Public Dim theLW As ListingWindow = theSession.ListingWindow
Dim strMacroName as String = "MyMacro010"
Public theNXMessageBox As NXMessageBox = theUISession.NXMessageBox
Public theNXMessageBoxTitle As String = "My Macro"	
Public Dim theBasePart As BasePart = theSession.Parts.BaseWork
Public Dim theSimPart As NXOpen.CAE.SimPart = theSession.Parts.BaseWork	

'--------------------------------
Sub Main()
	
theLW.Open()		
theLW.WriteLine ("-----------------------------------")
theLW.WriteLine ("Starting macro '" & strMacroName & "'...")
		
If (theBasePart is Nothing Or Not (TypeOf TheBasePart Is CAE.SimPart)) Then
 Dim Msg as String = "Macro '" & strMacroName & " ' only works on a SIM part"
 Dim Title as String = strMacroName
 MsgBox(Msg, vbOKOnly + vbCritical, Title)
 theLW.WriteLine ("End of macro...")	
 theLW.WriteLine ("-----------------------------------")
Exit Sub
End if 'Display the GUI MyMacro_GUI.Main() GetOnWithIt() End sub

 

 Thanks

 

Regards

 

JXB

 

 

Production: NX9.0.3.4, NX10.0.2.6
Development: VB.NET (amateur level !)

Re: Handling .DLX file not found - How to?

The exception object will be thrown to whatever sub or function called the MyMacro_GUI.New subroutine. Where is the MyMacro_GUI object created?

Re: Handling .DLX file not found - How to?

Thanks cowski1. I think I have my tought a bit muddle here (my limited vba knowledge is showing now!) I think I am doing the following;

 

Module MyMacro

 'Lauch the GUI

 MyMacro_GUI.Main()

 TheProgramToBeExecuted()

End Module

'$------

Public Class MyMacro_GUI

  Public Shared Sub Main()

   Try
    theMyMacro_GUI = New MyMacro_GUI()
    ' The following method shows the dialog immediately
       theMyMacro_GUI.Show()
   Catch ex As Exception
    '---- Enter your exception handling code here -----
    theUI.NXMessageBox.Show("Block Styler", NXMessageBox.DialogType.Error, ex.ToString)
   Finally
   
    If theMyMacro_GUI IsNot Nothing Then
       theMyMacro010_GUI.Dispose()
     End If
   End Try 
  End Sub


Public Sun New()

 'as defined in previous post

End Sub


End Class

 

My understanding is the MyMacro_GUI.Main() is called which in turns try creating a New (instance!) of the GUI when theMyMacro_GUI = New MyMacro_GUI() is used

So based on your comment the exception is thrown back to MyMacro_GUI.Main() 

 

 

Production: NX9.0.3.4, NX10.0.2.6
Development: VB.NET (amateur level !)

Re: Handling .DLX file not found - How to?

Yes, the error should show up in the MyMacro_GUI.Main method. Since your code is in a Try block at that point, it shold transfer control to the Catch block and you would see an NX messagebox pop up with the error description.

 

Is this what is happening? You should be able to re-thow the error up another level if that is what you want to do.