NXOpen中的信息显示窗口

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 }

运行效果如下:

原文地址:https://www.cnblogs.com/Lemniscate/p/3494762.html