In a previous post I showed how you could create a constructor that a layout could use but no other code could.
Seems that in oder to make this a little more generic and cross-platform you need to look for a different stack entry.
Because macOS and Windows do things differently you can get a very different stack trace on Windows that you would on the Mac. So instead of looking for Window.__Init%%o you should look for the substring ._CreateControls0%%o<
So the updated code in the no parameter constructor looks like
Try Raise New NilObjectException Catch noe As NilObjectException Dim stack() As String = noe.Stack // IF this is an instance created on a layout we should find a // ._CreateControls0%%o< in the stack above the call to this // Constructor // cant look for the whole string as parts of it are the specific // name of the window being constructed which will change by // window name For i As Integer = 0 To stack.Ubound If stack(i).InStr("._CreateControls0%%o<") > 0 Then #Pragma BreakOnExceptions default Return End If Next // and if we do not then raise an UnsupportedOperation error Raise New UnsupportedOperationException End Try