ListView コントロールは、3ds Max のスクリプト ツールの中で最も広く使用されている ActiveX コントロールです。ActiveX の ListView コントロールを使用したスクリプトを DotNet の ListView コントロールを使用するように変換するプロセスは、比較的単純です。
ここでは、チュートリアル - ListView ActiveX コントロールを使用した選択オブジェクト検査プログラムの開発 - 第 1 部のトピックで紹介されている単純なスクリプトを変換の一例として取り上げてみましょう。
次のスクリプトは、元の ActiveX コードをコメント アウトして緑色のフォントで示し、新たにコメント付きの DotNet コードを追加したものです。2 つのコードを比較してみましょう。
スクリプトの変換
macroScript SceneListView category:"DotNet" ( rollout listview_rollout "ListView Selected" ( /* ActiveX Version: fn initListView lv = ( lv.gridLines = true lv.View = #lvwReport lv.fullRowSelect = true layout_def = #("Object Name", "Object Class", "Verts", "Faces", "Material") for i in layout_def do ( column = lv.ColumnHeaders.add() column.text = I ) ) */ fn initListView lv = ( lv.gridLines = true --same as in ActiveX --The following controls the display of details. We use defaults: lv.View = (dotNetClass "System.Windows.Forms.View").Details lv.fullRowSelect = true --same as in ActiveX layout_def = #("Object Name", "Object Class", "Verts", "Faces", "Material") for i in layout_def do lv.Columns.add i 96 --add column with name and optional width ) /* ActiveX Version: fn fillInSpreadSheet lv = ( for o in selection do ( li = lv.ListItems.add() li.text = o.name sub_li = li.ListSubItems.add() sub_li.text = (classof o) as string sub_li = li.ListSubItems.add() sub_li.text = try((o.mesh.numverts) as string)catch("--") sub_li = li.ListSubItems.add() sub_li.text = try((o.mesh.numfaces) as string)catch("--") sub_li = li.ListSubItems.add() sub_li.text = (o.material) as string ) ) */ fn fillInSpreadSheet lv = ( theRange = #() --array to collect the list items for o in selection do ( --First we create a ListViewItem objectwith the object's name: li = dotNetObject "System.Windows.Forms.ListViewItem" o.name --Then we add all the sub-itemswith the desired string values: sub_li = li.SubItems.add ((classof o) as string) sub_li = li.SubItems.add (try((o.mesh.numverts) as string)catch("--")) sub_li = li.SubItems.add (try((o.mesh.numfaces) as string)catch("--")) sub_li = li.SubItems.add ((o.material) as string) append theRange li--we add the list item to the array ) lv.Items.AddRange theRange--when done, we populate the ListView ) /* ActiveX Version: activeXControl lv_objects "MSComctlLib.ListViewCtrl" width:490 height:190 align:#center */ dotNetControl lv_objects "System.Windows.Forms.ListView" width:490 height:190 align:#center on listview_rollout open do ( initListView lv_objects fillInSpreadSheet lv_objects ) ) try(destroyDialog listview_rollout)catch() createDialog listview_rollout 500 200 )