- 自動編程
- 自動出圖
- 設(shè)計(jì)建模
- UG/NX
【技術(shù)分享】【C#】NX樹列表節(jié)點(diǎn)的多類型數(shù)據(jù)關(guān)聯(lián)管理

琛
帖子
14
14
精華
1
1
積分
154
154
二次開發(fā)
技術(shù)分享
在NX二次開發(fā)中,通常樹列表節(jié)點(diǎn)不僅僅作為顯示內(nèi)容的載體,在程序中內(nèi),節(jié)點(diǎn)(Node)往往對應(yīng)著各類的數(shù)據(jù),對樹列表節(jié)點(diǎn)的值修改,需要同步對數(shù)據(jù)值的修改。
數(shù)據(jù)的類型往往并非一成不變,如果存在多種數(shù)據(jù)類型需要綁定節(jié)點(diǎn)的情況,此時可以使用如下方法。
using System.Collections.Generic; using System.Linq; using NXOpen.BlockStyler; namespace F3D.DF.InfManagement.BatchColoringOfHoles { internal class ToolNodeData { /// <summary> /// 行綁定數(shù)據(jù) /// </summary> /// <param name="node"></param> /// <param name="nodeDataTypes"></param> internal ToolNodeData(Node node, NodeDataTypes nodeDataTypes) { Node = node; NodeDataType = nodeDataTypes; } internal NodeDataTypes NodeDataType { get; } internal enum NodeDataTypes { Description, HoleColorStandard } /// <summary> /// 行 /// </summary> internal Node Node { get; set; } /// <summary> /// 數(shù)據(jù) /// </summary> internal object Data { get; set; } } internal class NodeDataManage : List<ToolNodeData> { /// <summary> /// 檢索數(shù)據(jù) /// </summary> /// <typeparam name="T"></typeparam> /// <param name="node"></param> internal T Search<T>(Node node)where T:class { return this.FirstOrDefault(obj => obj.Node == node)?.Data as T; } /// <summary> /// 移除某個數(shù)據(jù) /// </summary> /// <param name="nodeDataTypes"></param> internal void RemoveNodeData(Node node) { this.Remove(this.FirstOrDefault(obj => obj.Node.Tag == node.Tag)); } /// <summary> /// 移除某個類型的數(shù)據(jù) /// </summary> /// <param name="nodeDataTypes"></param> internal void RemoveNodeDataOfType(ToolNodeData.NodeDataTypes nodeDataTypes) { for (int i = this.Count-1; i>=0; i--) { if (this[i].NodeDataType == nodeDataTypes) { this.RemoveAt(i); } } } } }
internal class NodeData { /// <summary> /// 行綁定數(shù)據(jù) /// </summary> /// <param name="node"></param> /// <param name="nodeDataTypes"></param> internal NodeData(Node node, NodeDataTypes nodeDataTypes) { Node = node; NodeDataType = nodeDataTypes; } internal NodeDataTypes NodeDataType { get; } internal enum NodeDataTypes { //修改零件名稱預(yù)設(shè) PartName, //修改預(yù)設(shè)備注 Remarks, } /// <summary> /// 行 /// </summary> internal Node Node { get; set; } /// <summary> /// 數(shù)據(jù) /// </summary> internal object Data { get; set; } }
使用方法,先new
internal class ConfigEditBuilder { private NodeDataManage _nodeDataManage = null; internal void Show() { _nodeDataManage = new NodeDataManage();
}
}
數(shù)據(jù)添加
_nodeDataManage.Add(new NodeData(node, NodeData.NodeDataTypes.PartName) { Data = partName });
數(shù)據(jù)檢索
var data = _nodeDataManage.Search<Material>(node);
通過節(jié)點(diǎn)刪除數(shù)據(jù)
_nodeDataManage.RemoveNodeData(node);
登錄論壇用戶后可查看全部內(nèi)容
1000
1
2023-12-25 16:47:35
by f3dexpress Nico
請選擇移動至版塊:
確認(rèn)移動
1
0
12
??????
回復(fù)加入討論