/// <summary> /// OfficeFileの状態をチェックし、アラート表示、ToolTipの設定を行う。 /// </summary> /// <param name="officeNode"></param> private void RefreshOfficeNode(OfficeFileTreeNode officeNode) { OfficeFile file = officeNode.TargetFile; bool alert = file.Status != OfficeFileStatus.Normal; officeNode.ImageIndex = officeNode.SelectedImageIndex = (alert ? IMG_EXCEL_ALERT : IMG_EXCEL); officeNode.ToolTipText = file.StatusMessage; }
private void RefreshFilesDisplay() { //Filesに存在しないNodeを削除 //Libraryに存在しないNodeを削除 //リストの複製を用意し、複製で削除判定。複製のForEach内で本体から削除する。(本体のForEachではないので、列挙中の削除例外は発生しない) List <OfficeFileTreeNode> cloneList = this.m_FileRootNode.Nodes.Cast <OfficeFileTreeNode>().ToList(); cloneList.Where(node => !this.m_TargetProject.ExcelFiles.Any(file => file.FileName == node.TargetFile.FileName)).ToList() //このToListの時点で、Librariesに存在しないノードがリストアップされている .ForEach(node => this.m_FileRootNode.Nodes.Remove(node)); //for (int i = this.m_FileRootNode.Nodes.Count - 1; i >= 0; i--) { // OfficeFileTreeNode node = (OfficeFileTreeNode)this.m_FileRootNode.Nodes[i]; // if (!this.m_TargetProject.ExcelFiles.Any(x => x.FileName == node.TargetFile.FileName)) { // this.m_FileRootNode.Nodes.Remove(node); // } //} //FilesとNodeを同期 for (int i = 0; i < this.m_TargetProject.ExcelFiles.Count; i++) { OfficeFile file = this.m_TargetProject.ExcelFiles[i]; AppMain.logger.Debug($"{this.GetType().Name}.RefreshDisplay / Show File. Path={file.FileName}"); OfficeFileTreeNode node = this.m_FileRootNode.Nodes.Cast <OfficeFileTreeNode>().FirstOrDefault(x => x.TargetFile.FileName == file.FileName); if (node == null) { node = new OfficeFileTreeNode(file) { ImageIndex = IMG_EXCEL, SelectedImageIndex = IMG_EXCEL }; this.m_FileRootNode.Nodes.Add(node); } node.TargetFile = file; //ファイルのエラー状態のチェックなど this.RefreshOfficeNode(node); } if (this.m_FileRootNode.Nodes.Count != 0) { this.m_FileRootNode.Nodes[0].EnsureVisible(); } }