private void LoadNode(XmlNode parent, ItemCollection items, CategoricalTreeViewItem parentItem) { foreach (XmlNode child in parent) { if (child.NodeType == XmlNodeType.Element && child.Name == "node") { string tmp = child.Attributes["range"].Value; string name = child.Attributes["name"].Value; string tmp2 = tmp.Substring(1, tmp.Length - 2); int tmpIndex = tmp2.IndexOf('-'); int min, max; int.TryParse(tmp2.Substring(0, tmpIndex), out min); int.TryParse(tmp2.Substring(tmpIndex + 1), out max); CategoricalTreeViewItem c = new CategoricalTreeViewItem(0, 0, parentItem); c.UpdateInfo(min, max, name); items.Add(c); if (child.HasChildNodes) { LoadNode(child, c.Items, c); } } } }
//하위 노드 생성 private void buttonAdd_Click(object sender, RoutedEventArgs e) { CategoricalTreeViewItem parent = (treeViewC.SelectedItem as CategoricalTreeViewItem); parent.Items.Add(new CategoricalTreeViewItem(parent.min, parent.max, parent, "새로운 범위") { IsExpanded = true }); parent.IsExpanded = true; //확장 checkRange(); //확장 후에 범위 에러 체크 }
//선택 노드 삭제 private void buttonDelete_Click(object sender, RoutedEventArgs e) { if ((treeViewC.SelectedItem as CategoricalTreeViewItem).Items.Count == 0) { CategoricalTreeViewItem parent = (treeViewC.SelectedItem as CategoricalTreeViewItem).owner; parent.Items.Remove(treeViewC.SelectedItem); parent.IsSelected = true; //삭제 후에 부모 노드 선택 checkRange(); //삭제 후에 범위 에러 체크 } else { MessageBox.Show("먼저 모든 하위노드를 삭제 해야합니다."); } }
//min, max 값 적용, 이름 변경 private void buttonApply_Click(object sender, RoutedEventArgs e) { int min, max; CategoricalTreeViewItem parent = (treeViewC.SelectedItem as CategoricalTreeViewItem).owner; if (int.TryParse(textBoxMinC.Text, out min) && int.TryParse(textBoxMaxC.Text, out max)) { if (min > max) { MessageBox.Show("최소값이 최대값보다 큽니다."); } else if ((parent != null) && (min < parent.min || max > parent.max)) { MessageBox.Show("상위 노드의 범위를 벗어납니다."); } else if (min < 0) { MessageBox.Show("인덱스 값은 0 이상이어야 합니다."); } else if (max >= listC.Count) { MessageBox.Show("인덱스 값은 엔트리 개수 이하이어야 합니다."); } else { //적용 (treeViewC.SelectedItem as CategoricalTreeViewItem).UpdateInfo(min, max, textBoxNameC.Text); checkRange(); //적용 후에 범위 에러 체크 } } else { MessageBox.Show("잘못된 값을 입력하셨습니다."); } }
public string nameAttribute; //xml 기록용, 이름 attribute public CategoricalTreeViewItem(int min = 0, int max = 0, CategoricalTreeViewItem owner = null, string name = "새로운 노드") { UpdateInfo(min, max, name); IsSelected = true; this.owner = owner; }