using OTSCommon.Model; using OTSIncAReportApp.OTSSampleReportInfo; //using OTSINTERFACE; using System.Collections.Generic; using System.Drawing; using System.Windows.Forms; namespace OTSIncAReportApp.OTSDataMgrFunction { /// /// 树控件操作类 /// public class OTSTreeViewData { #region 变量定义 /// /// 测量结果主窗口对象 /// frmMeasureRstMgr m_RstWindow = null; /// /// 控制插入测量结果标识,全局变量 /// bool m_bSetFlag = false; /// /// 切换测量结果是否成功的标志 /// bool m_bSwichFlag = false; #endregion #region 构造函数及初始化 /// /// 构造函数 /// /// public OTSTreeViewData(frmMeasureRstMgr RstWindow) { //主窗口数据源 m_RstWindow = RstWindow; } #endregion #region 树控件操作相关函数 /// /// 在树控件上显示相关测量结果 /// /// /// public void DisplayWorkSampleTree(List ResultFileList) { if (ResultFileList != null && ResultFileList.Count > 0) { m_RstWindow.treeView1.Nodes.Clear(); //清除Treeview所有节点 if (ResultFileList.Count > 0) { for (int i = 0; i < ResultFileList.Count; i++) { //从底层获取到测量结果的名称 string SampleName = ResultFileList[i].anotherFileName; TreeNode node = new TreeNode(); node.Text = SampleName; //将获取到的测量结果名称,添加到树控件上 m_RstWindow.treeView1.Nodes.Add(node); node.NodeFont = new Font("宋体", 10, FontStyle.Regular); } } } else { #region 右键添加结果文件显示树 if (0 == m_RstWindow.treeView1.Nodes.Count) { TreeNode node = new TreeNode(); node.Text = ""; m_RstWindow.treeView1.Nodes.Add(node); node.NodeFont = new Font("宋体", 10, FontStyle.Regular); //设置工作样品的CheckBox 值 node.Checked = false; m_RstWindow.treeView1.SelectedNode = node; m_RstWindow.treeView1.Focus(); m_RstWindow.m_WorkSampleNode = node; } else { for (int iTNodeCount = 0; iTNodeCount < m_RstWindow.treeView1.Nodes.Count; iTNodeCount++) { m_bSetFlag = false; InsertNewSampleNode(m_RstWindow.treeView1.Nodes[iTNodeCount]); } } #endregion } //根据样品属性数据中的SWITCH状态来设定Treeview的checkbox状态 和工作样品焦点 m_RstWindow.treeView1.ExpandAll(); //展开Treeview 树形节点 m_RstWindow.treeView1.Refresh(); m_RstWindow.treeView1.Scrollable = true; m_RstWindow.Refresh();//刷新一下,防止在加载功能模块时界面卡住树控件会显示出根节点 } /// /// 插入测量结果 /// /// private void InsertNewSampleNode(TreeNode node) { if (m_bSetFlag) { return; } if (null != node.Parent) { TreeNode NewNode = new TreeNode(); node.Parent.Nodes.Add(NewNode); if (m_RstWindow.m_WorkSampleParam.bSwitch) { node.Parent.LastNode.Checked = true; } else { node.Parent.LastNode.Checked = false; } node.Parent.LastNode.NodeFont = new Font("宋体", 10, FontStyle.Regular); m_RstWindow.treeView1.SelectedNode = NewNode; m_RstWindow.treeView1.Focus(); m_bSetFlag = true; m_RstWindow.m_WorkSampleNode = NewNode; return; } if (node.Nodes.Count != 0) { for (int i = 0; i < node.Nodes.Count; i++) { InsertNewSampleNode(node.Nodes[i]); } } } /// /// 切换测量结果状态 /// /// public void SetNewWorkSample(string sNewWSampleName) { for (int iTNodeCount = 0; iTNodeCount < m_RstWindow.treeView1.Nodes.Count; iTNodeCount++) { m_bSwichFlag = false; GetTreeNextNode(m_RstWindow.treeView1.Nodes[iTNodeCount], sNewWSampleName); } } /// /// 根据工作样品名称查找TREEVIEW 中工作样品节点 /// /// public void GetTreeWorkSampleNode(string sWorkSampleName) { for (int iTNodeCount = 0; iTNodeCount < m_RstWindow.treeView1.Nodes.Count; iTNodeCount++) { //改变选中的树节点状态 FindTreeWorkSampleNode(m_RstWindow.treeView1.Nodes[iTNodeCount], sWorkSampleName); } } /// /// 重新设置TREEVIEW的工作样品焦点 /// public void ReSetWorkSampleFoucs() { if (0 == this.m_RstWindow.treeView1.Nodes.Count) { return; } for (int i = 0; i < this.m_RstWindow.treeView1.Nodes.Count; i++) { SetTreeNodeFocus_ByWorkingIndex(m_RstWindow.treeView1.Nodes[i]); } m_RstWindow.treeView1.Refresh(); } #endregion #region 遍历树控件相关方法 /// /// 遍历树节点,根据底层数据判断,是否对该节点进行选中操作 /// /// /// private void GetTreeNextNode(TreeNode node, string sNewWSampleName) { if (m_bSwichFlag) //已经切换成功 { return; } if (sNewWSampleName == node.Text) { m_RstWindow.treeView1.SelectedNode = node; m_RstWindow.treeView1.Focus(); m_RstWindow.m_WorkSampleNode = node; m_bSwichFlag = true; } if (node.Nodes.Count != 0) { for (int i = 0; i < node.Nodes.Count; i++) { //遍历下一个树的节点 GetTreeNextNode(node.Nodes[i], sNewWSampleName); } } } /// /// 递归调用,查找树节点,找到为后该节点设置为选择节点,并设置焦点 /// /// /// private void FindTreeWorkSampleNode(TreeNode Tnode, string sWorkSampleName) { if (Tnode.Text == sWorkSampleName) { m_RstWindow.m_WorkSampleNode = Tnode; m_RstWindow.treeView1.SelectedNode = Tnode; m_RstWindow.treeView1.Focus(); return; } if (Tnode.Nodes.Count != 0) { for (int i = 0; i < Tnode.Nodes.Count; i++) { FindTreeWorkSampleNode(Tnode.Nodes[i], sWorkSampleName); } } } /// /// 递归遍历树节点,找到后,设置树节点的选中状态 /// /// private void SetTreeNodeFocus_ByWorkingIndex(TreeNode node) { if (node.Text == m_RstWindow.treeView1.SelectedNode.Text) { m_RstWindow.treeView1.SelectedNode = m_RstWindow.m_WorkSampleNode; m_RstWindow.treeView1.Focus(); m_RstWindow.treeView1.Refresh(); } if (node.Nodes.Count != 0) { for (int i = 0; i < node.Nodes.Count; i++) { SetTreeNodeFocus_ByWorkingIndex(node.Nodes[i]); } } } #endregion } }