///<summary>ツリー図の罫線を作成する</summary> private string CreateRuledLine <T>(OutputStructTreeNode <T> outputStructTreeNode, int prevIndent, ref string sourceRuledLine, int indentLength = 4) where T : class { int nowIndent = outputStructTreeNode.Indent; // 項目がルートの場合、ツリー図の罫線はなし if (nowIndent == 0) { return(""); } // 前回の項目と異なるノードグループ、かつ、子ノードでない場合 if (nowIndent < prevIndent) { sourceRuledLine.Substring(0, nowIndent * indentLength - 1); return(sourceRuledLine + SelectBranchRuledLine(outputStructTreeNode.IsLastItemInChildren)); } // 前回の項目と同じノードグループの場合 else if (nowIndent == prevIndent) { return(outputStructTreeNode.IsLastItemInChildren ? sourceRuledLine.Substring(0, sourceRuledLine.Length - 1) + branchWithLastItemRuledLine : sourceRuledLine); } // 前回の項目の子ノードの場合 else { // 親ノードがノードグループの最後尾の項目かどうかに応じて分岐罫線の箇所を置き換える if (0 < sourceRuledLine.Length) { int strIndex = sourceRuledLine.Length - indentLength - 1; string replaceedChar = outputStructTreeNode.ParentNode.IsLastItemInChildren ? " " : vBarRuledLine; sourceRuledLine = sourceRuledLine.Remove(strIndex, 1).Insert(strIndex, replaceedChar); } // インデント文字を追加 for (int cnt = 1; cnt < indentLength; cnt++) { sourceRuledLine += " "; } sourceRuledLine += SelectBranchRuledLine(outputStructTreeNode.IsLastItemInChildren); return(sourceRuledLine); } }
private List <OutputStructTreeNode <MapTreeNodeStr> > SetParentAndChildrenOnMapTreeStrs(List <OutputStructTreeNode <MapTreeNodeStr> > mapTreeNodesStrs) { for (int nodeIndex = 0; nodeIndex < mapTreeNodesStrs.Count; nodeIndex++) { var outputStructTreeNode = mapTreeNodesStrs[nodeIndex]; if (outputStructTreeNode.Original.ParentNode != null) { // 親ノードのMapTreeNodeStrを探索 string mapIDOfParentNode = outputStructTreeNode.Original.ParentNode.MapID.ToString(); OutputStructTreeNode <MapTreeNodeStr> parentMapTreeNodeStr = mapTreeNodesStrs.Find(x => x.Original.MapID.Sentence == mapIDOfParentNode); // 親ノードと子ノードを追加 outputStructTreeNode.ParentNode = parentMapTreeNodeStr; parentMapTreeNodeStr.ChildrenNode.Add(outputStructTreeNode); } else { outputStructTreeNode.ParentNode = null; } } return(mapTreeNodesStrs); }