using OTSModelSharp.ResourceManage; using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace OTSMeasureApp { public class OTSDisplayTreeBase { OTSSolutionWindow m_SolutionWindow = null; NLog.Logger log; public OTSDisplayTreeBase(OTSSolutionWindow SolutionWindow) { log = NLog.LogManager.GetCurrentClassLogger(); m_SolutionWindow = SolutionWindow; m_SolutionWindow.treeView1.Nodes.Clear(); //清除Treeview所有节点 m_SolutionWindow.treeView1.CheckBoxes = true; //设置样品CheckBOX框可选状态 m_SolutionWindow.treeView1.Font = new Font("宋体", 10, FontStyle.Regular); } public void DisplayWorkSampleTree(CTreeSampleParam TSampleParam) { if ("" == TSampleParam.sWorkSampleName || "" == TSampleParam.sSampleTitleName) { return; } TreeNode m_Menunode = new TreeNode(); //树的跟节点 // 显示样品数标题 m_Menunode.NodeFont = new Font("宋体", 10, FontStyle.Regular); TreeNode node = new TreeNode(); node.Text = TSampleParam.sWorkSampleName; m_SolutionWindow.treeView1.Nodes.Add(node); node.NodeFont = new Font("宋体", 10, FontStyle.Regular); //设置工作样品的CheckBox 值 if (TSampleParam.bSwitch) { node.Checked = true; } else { node.Checked = false; } m_SolutionWindow.treeView1.SelectedNode = node; m_SolutionWindow.treeView1.Focus(); m_SolutionWindow.m_WorkSampleNode = node; m_SolutionWindow.treeView1.ExpandAll(); //展开Treeview 树形节点 m_SolutionWindow.treeView1.Refresh(); m_SolutionWindow.treeView1.Scrollable = true; } // bool bSetFlag : 作为设置样品CHECKBOX 和 Foucs 完成后的退出标志 bool bSetFlag = false; private void InsertNewSampleNode(TreeNode node) { if (bSetFlag) { return; } if (null != node.Parent) { TreeNode NewNode = new TreeNode(); NewNode.Text = m_SolutionWindow.m_WorkSampleParam.sWorkSampleName; node.Parent.Nodes.Add(NewNode); if (m_SolutionWindow.m_WorkSampleParam.bSwitch) { node.Parent.LastNode.Checked = true; } else { node.Parent.LastNode.Checked = false; } node.Parent.LastNode.NodeFont = new Font("宋体", 10, FontStyle.Regular); m_SolutionWindow.treeView1.SelectedNode = NewNode; m_SolutionWindow.treeView1.Focus(); bSetFlag = true; m_SolutionWindow.m_WorkSampleNode = NewNode; return; } if (node.Nodes.Count != 0) { for (int i = 0; i < node.Nodes.Count; i++) { InsertNewSampleNode(node.Nodes[i]); } } } //切换工作样品 SetSampleCheckBoxAndWorkSampleFoucs() //string sNewWorkSampleName: 新的工作样品名 private void SetNewWorkSample(string sNewWSampleName) { for (int iTNodeCount = 0; iTNodeCount < m_SolutionWindow.treeView1.Nodes.Count; iTNodeCount++) { bSwithFlag = false; GetTreeNextNode(m_SolutionWindow.treeView1.Nodes[iTNodeCount], sNewWSampleName); } } bool bSwithFlag = false; //切换样品成功标志 private void GetTreeNextNode(TreeNode node, string sNewWSampleName) { if (bSwithFlag) //已经切换成功 { return; } //选择当前节点 SelectNewWorkSampleNode(node, sNewWSampleName); if (node.Nodes.Count != 0) { for (int i = 0; i < node.Nodes.Count; i++) { GetTreeNextNode(node.Nodes[i], sNewWSampleName); } } } //根据样品的SWITCH状态设置TREEVIEW的CHECKBOX值 private void SelectNewWorkSampleNode(TreeNode node, string sNewWSampleName) { //设置样品的CheckBox 状态 //设置当前工作样品 if (sNewWSampleName == node.Text) { m_SolutionWindow.treeView1.SelectedNode = node; m_SolutionWindow.treeView1.Focus(); m_SolutionWindow.m_WorkSampleNode = node; bSwithFlag = true; } } //切换工作样品 //string sNewWorkSampleName: 新的工作样品名 public void SwitchWorkSample(string sNewWorkSampleName) { SetNewWorkSample(sNewWorkSampleName); } //修改工作样品名称(grid修改后需要更改TREEVIEW对应的样品名称) public void EditTreeWorkSampleName(string sWOldName, string sWNewName) { for (int iTNodeCount = 0; iTNodeCount < m_SolutionWindow.treeView1.Nodes.Count; iTNodeCount++) { bSwithFlag = false; var curNode = m_SolutionWindow.treeView1.Nodes[iTNodeCount]; if (curNode.Text == sWOldName) { curNode.Text = sWNewName; } } m_SolutionWindow.treeView1.Refresh(); } public void DisplayTreeViewData(List TSampleParamList, CTreeSampleParam WorkSampleParam) { m_SolutionWindow.treeView1.Nodes.Clear(); //清除Treeview所有节点 if (TSampleParamList.Count > 0) { TreeNode Menunode = new TreeNode(); int iTSParamCount = TSampleParamList.Count; for (int i = 0; i < iTSParamCount; i++) { TreeNode node = new TreeNode(); node.Text = (string)TSampleParamList[i].sWorkSampleName; //设置样品节点的Checkbox值 if (TSampleParamList[i].bSwitch) { node.Checked = true; } else { node.Checked = false; } //判断是否为工作样品 if (TSampleParamList[i].sWorkSampleName == WorkSampleParam.sWorkSampleName) { //样品是工作样品 m_SolutionWindow.treeView1.SelectedNode = node; m_SolutionWindow.treeView1.Focus(); m_SolutionWindow.m_WorkSampleNode = node; } node.NodeFont = new Font("宋体", 10, FontStyle.Regular); //node.ForeColor = Color.Blue; ; m_SolutionWindow.treeView1.Nodes.Add(node); } } //根据样品属性数据中的SWITCH状态来设定Treeview的checkbox状态 和工作样品焦点 // SetCheckBoxAndWorkSampleFoucs(csSampleNameList); m_SolutionWindow.treeView1.ExpandAll(); //展开Treeview 树形节点 } // 修改样品树对应节点的样品名称 //string sOldSampleName : 修改前名字 //string sNewSampleName : public void EditTreeNodeSampleName(string sOldSampleName, string sNewSampleName) { for (int iTNodeCount = 0; iTNodeCount < m_SolutionWindow.treeView1.Nodes.Count; iTNodeCount++) { var node = m_SolutionWindow.treeView1.Nodes[iTNodeCount]; if (node.Text == sOldSampleName) { node.Text = sNewSampleName; } } m_SolutionWindow.treeView1.ExpandAll(); m_SolutionWindow.treeView1.Show(); m_SolutionWindow.treeView1.Visible = true; m_SolutionWindow.treeView1.Refresh(); m_SolutionWindow.treeView1.Update(); m_SolutionWindow.Invalidate(); } //根据样品的SWITCH状态设置TREEVIEW的CHECKBOX值 private void SetSampleNodeCheckBox(TreeNode node, List SampleNameList) { bool bFindNodeFlag = false; int iCount = SampleNameList.Count(); for (int i = 0; i < iCount; i++) { int iSampleCount = SampleNameList[i].SampleDataList.Count(); //每个样品的属性个数 HERE: for (int k = 0; k < iSampleCount; k++) { if (!bFindNodeFlag) { //先判断样品列表中的样品名是否等于TREENODE对应的名字 if (OTS_SAMPLE_PROP_GRID_ITEMS.SAMPLE_NAME == SampleNameList[i].SampleDataList[k].SampleId) { if (node.Text == (string)SampleNameList[i].SampleDataList[k].GetSampleVal()) { bFindNodeFlag = true; //设置当前工作样品为选中状态(颜色为蓝色) if (m_SolutionWindow.m_WorkSampleName == node.Text) { m_SolutionWindow.treeView1.SelectedNode = node; m_SolutionWindow.treeView1.Focus(); m_SolutionWindow.m_WorkSampleNode = node; //设置当前工作样品 */ } goto HERE; } } } else { //当样品列表中的样品名等于TREENODE对应的名字,说明此样品名显示在TREEVIEW中 //如何在判断样品属性数据SWITCH状态,如果SWITCH=TRUE, 则将对应的TREEVIEW的节点的CHECKBOX选中 if (OTS_SAMPLE_PROP_GRID_ITEMS.SWITCH == SampleNameList[i].SampleDataList[k].SampleId) { if ((bool)SampleNameList[i].SampleDataList[k].GetSampleVal()) { node.Checked = true; } return; } } } } } private void GetTreeNextNode(TreeNode node, List SampleNameList) { SetSampleNodeCheckBox(node, SampleNameList); if (node.Nodes.Count != 0) { for (int i = 0; i < node.Nodes.Count; i++) { GetTreeNextNode(node.Nodes[i], SampleNameList); } } } //根据样品属性数据中的SWITCH状态来设定Treeview的checkbox状态 和工作样品焦点 private void SetCheckBoxAndWorkSampleFoucs(List csSampleNameList) { for (int iTNodeCount = 0; iTNodeCount < m_SolutionWindow.treeView1.Nodes.Count; iTNodeCount++) { GetTreeNextNode(m_SolutionWindow.treeView1.Nodes[iTNodeCount], csSampleNameList); } } //删除选定的样品节点 public void DeleteTreeViewNode(TreeNode TNode) { m_SolutionWindow.treeView1.Nodes.Remove(TNode); } /// /// 获取排序节点 /// /// 当前节点 /// 排序后节点名称列表 private void GetAfterSortTreeNode(TreeNode node,ref List SNameList) { SNameList.Add(node.Text); if (node.Nodes.Count != 0) { for (int i = 0; i < node.Nodes.Count; i++) { GetAfterSortTreeNode(node.Nodes[i], ref SNameList); } } } //当移动了Treeview的节点位置后,将m_csTreeNodeInfoList里的节点按照移动后的Treeview重新排序 public void SortTreeNodeList() { List SampleNameList = new List(); for (int iTNodeCount = 0; iTNodeCount < m_SolutionWindow.treeView1.Nodes.Count; iTNodeCount++) { GetAfterSortTreeNode(m_SolutionWindow.treeView1.Nodes[iTNodeCount],ref SampleNameList); } } private void GetNextNode(TreeNode Tnode, List SMeaInfo) { int iTSListCount = m_SolutionWindow.m_TreeSampleInfoList.Count; for (int i = 0; i < iTSListCount; i++) { int iSListCount = m_SolutionWindow.m_TreeSampleInfoList[i].SampleDataList.Count(); for (int k = 0; k < iSListCount; k++) { if (OTS_SAMPLE_PROP_GRID_ITEMS.SAMPLE_NAME == m_SolutionWindow.m_TreeSampleInfoList[i].SampleDataList[k].SampleId) { if (Tnode.Text == (string)m_SolutionWindow.m_TreeSampleInfoList[i].SampleDataList[k].GetSampleVal()) { SMeaInfo.Add(m_SolutionWindow.m_TreeSampleInfoList[i]); goto HERE; } } } } HERE: if (Tnode.Nodes.Count != 0) { for (int i = 0; i < Tnode.Nodes.Count; i++) { GetNextNode(Tnode.Nodes[i], SMeaInfo); } } } //当Propwindw的switch状态改变后,对应的Checkbox也发生同样变化 public void SetSampleCheckboxStatu(string sSampleName, bool bStatu) { for (int iTNodeCount = 0; iTNodeCount < m_SolutionWindow.treeView1.Nodes.Count; iTNodeCount++) { var Tnode = m_SolutionWindow.treeView1.Nodes[iTNodeCount]; if (Tnode.Text == sSampleName) { Tnode.Checked = bStatu; m_SolutionWindow.treeView1.SelectedNode = Tnode; m_SolutionWindow.treeView1.Focus(); } } } //根据工作样品名称查找TREEVIEW 中工作样品节点 public void GetTreeWorkSampleNode(string sWorkSampleName) { for (int iTNodeCount = 0; iTNodeCount < m_SolutionWindow.treeView1.Nodes.Count; iTNodeCount++) { var Tnode = m_SolutionWindow.treeView1.Nodes[iTNodeCount]; if (Tnode.Text == sWorkSampleName) { m_SolutionWindow.m_WorkSampleNode = Tnode; m_SolutionWindow.treeView1.SelectedNode = Tnode; m_SolutionWindow.treeView1.Focus(); return; } } } //重新设置TREEVIEW的工作样品焦点 public void ReSetWorkSampleFoucs() { if (0 == this.m_SolutionWindow.treeView1.Nodes.Count) { return; } for (int i = 0; i < this.m_SolutionWindow.treeView1.Nodes.Count; i++) { GetNodeText(m_SolutionWindow.treeView1.Nodes[i]); } m_SolutionWindow.treeView1.Refresh(); } private void GetNodeText(TreeNode node) { if (node.Text == m_SolutionWindow.m_WorkSampleNode.Text) { m_SolutionWindow.treeView1.SelectedNode = m_SolutionWindow.m_WorkSampleNode; m_SolutionWindow.treeView1.Focus(); m_SolutionWindow.treeView1.Refresh(); } if (node.Nodes.Count != 0) { for (int i = 0; i < node.Nodes.Count; i++) { GetNodeText(node.Nodes[i]); } } } //查找当前TREEVIEW被选中的工作样品,并返回工作样品名 public string GetWorkSampleName() { bFindWorkSampleFlag = false; for (int iTNodeCount = 0; iTNodeCount < m_SolutionWindow.treeView1.Nodes.Count; iTNodeCount++) { FindWorkSample(m_SolutionWindow.treeView1.Nodes[iTNodeCount]); if (bFindWorkSampleFlag) { return sWorkSampleName; } } return ""; } string sWorkSampleName = ""; //工作样品名称 bool bFindWorkSampleFlag = false; private void FindWorkSample(TreeNode Tnode) { if (null != Tnode.Parent) { if (Tnode.IsSelected) { sWorkSampleName = Tnode.Text; //找到工作样品名称 bFindWorkSampleFlag = true; return; } } if (Tnode.Nodes.Count != 0) { for (int i = 0; i < Tnode.Nodes.Count; i++) { if (bFindWorkSampleFlag) { break; } FindWorkSample(Tnode.Nodes[i]); } } } //设置样品参数锁的状态 public void SetSampleParaLockStatu() { if (m_SolutionWindow.SampleParaLock.Checked) { m_SolutionWindow.m_MeasureAppForm.m_ProjParam.SetWorkSampleParamLock(true); m_SolutionWindow.SampleParaLock.Checked = true; } else { m_SolutionWindow.m_MeasureAppForm.m_ProjParam.SetWorkSampleParamLock(false); m_SolutionWindow.SampleParaLock.Checked = false; } } //返回右键选中节点的样品参数锁状态 public bool GetSampleNodeLockStatu(ref bool CheckTNodeLockStatu) { CTreeSampleParam WSParam = new CTreeSampleParam(); if (!m_SolutionWindow.m_MeasureAppForm.GetWorkSampleParamLock(ref WSParam)) { log.Error("(OTSDisplayTreeBase.GetSampleNodeLockStatu ) m_SolutionWindow.m_MeasureAppForm.GetWorkSampleParamLock(ref WSParam) = false Failed !"); return false; } CheckTNodeLockStatu = WSParam.bSwitch; return true; } // 清除样品树的显示节点 public void DeleteAllTreeNode() { m_SolutionWindow.treeView1.Nodes.Clear(); } } }