NX中许多消息都是通过信息窗口反馈给用户的,如下图所示:
NXOpen中使用ListingWindow类表示信息窗口,该窗口从实现的角度来看,更像一个数据流而不是一个窗口,为什么怎么说呢?看看它的成员方法和属性就知道了。
ListingWindow中比较重要的方法有Open()、Close()、CloseWindow()、WriteLine()和WriteFullLine()等。其中Open方法和Close方法实际上是操作窗口中显示的数据的,就是说,使用ListingWindow显示数据之前,必须要使用Open方法打开,就像连接数据库一样,先要建立连接,然后使用完成之后还要使用Close方法关闭,该方法并不关闭窗体本身,而是关闭写入的数据流,关闭窗口要使用CloseWindow方法。
两个写字符串函数WriteLine和WriteFullLine其行为类似,但是WriteFullLine会无视字符个数,所有字符都会写入到一行,而WriteLine有字符数限制,超过了132个就会显示在下一行。如果提供的字符串是null,则什么都不错,也不会抛出异常。
ListingWindow的属性并不多,比较重要的就两个只读属性,其中一个是IsOpen用于检测ListingWindow是否打开,另一个是Device,返回DeviceType的枚举,该属性值受到方法SelectDevice()的影响,该方法的原型如下:
public void SelectDevice( ListingWindow.DeviceType deviceType, string fileName )
这个方法就是一个重定向选项,用于指定显示的数据流是只显示在窗口上还是写入文件中,或者两者都有。但是在使用时注意,输出被写入缓冲区,只有当设备被修改时才会被刷新,例如下面的代码在Close调用之后并不会将字符串写入到文件中去:
1 ListingWindow lw = theSession.ListingWindow; 2 lw.SelectDevice(ListingWindow.DeviceType.FileAndWindow, @"C:log.txt"); 3 lw.Open(); 4 if (lw.IsOpen) 5 lw.WriteLine(“Lemniscate”); 6 lw.Close();//不会被刷新 7 lw.SelectDevice(ListingWindow.DeviceType.Window, "");//现在才被刷新
下面的这段代码将源代码用ListingWindow显示出来:
1 using System.IO; 2 using NXOpen; 3 public class NXListingWindow 4 { 5 6 public static void Main() 7 { 8 Session theSession = Session.GetSession(); 9 UI theUI = UI.GetUI(); 10 StreamReader sr = new StreamReader(@"F:VS ProjectsNXListingWindowNXListingWindowNXListingWindow.cs"); 11 string s; 12 try 13 { 14 s = sr.ReadToEnd(); 15 sr.Close(); 16 sr.Dispose(); 17 ListingWindow lw = theSession.ListingWindow; 18 lw.SelectDevice(ListingWindow.DeviceType.FileAndWindow, @"C:log.txt"); 19 lw.Open(); 20 if (lw.IsOpen) 21 lw.WriteLine(s); 22 lw.Close();//不会被刷新 23 lw.SelectDevice(ListingWindow.DeviceType.Window, "");//现在才被刷新 24 } 25 catch (System.Exception ex) 26 { 27 theUI.NXMessageBox.Show("Exception!", NXMessageBox.DialogType.Error, ex.Message); 28 } 29 } 30 }
运行效果如下: