/// <summary> /// Возвращает узел дерева "не в списке", а если его не существует, то создает новый. /// </summary> /// <returns>Возвращает узел дерева "не в списке".</returns> public LCTreeNodeNoList ReturnGroupNoList() { TreeNode treeNode = LCDirectory.treeView.Nodes[0]; if (treeNode != null) { //перебор всех дочерних узлов foreach (TreeNode treeNodeWorking in treeNode.Nodes) { if (((LCTreeNode)treeNodeWorking).LCObjectType == LCObjectType.NoList) { return((LCTreeNodeNoList)treeNodeWorking); } } } LCTreeNodeNoList lcTreeNodeNoList = new LCTreeNodeNoList { Text = "<Не в списке>", Description = "Компьютеры которые не добавлялись в группу", ContextMenuStrip = LCTreeNode.noListContextMenuStrip, ImageIndex = 2, ToolTipText = "<Не в списке>\nКомпьютеры которые не добавлялись в группу. Сообщение для отладки: Ранее группы не было!" }; treeNode.Nodes.Add(lcTreeNodeNoList); return(lcTreeNodeNoList); }
/// <summary> /// Метод переопределения сети для хостов из группы "Не в списке" /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void ToolStripMenuItemFindSubnet_Click(object sender, EventArgs e) { List <String> list = new List <String>(); TreeNode node = this.lCDirectory.ReturnGroupNoList(); foreach (TreeNode tn in node.Nodes) { LCTreeNodeHost lc = (LCTreeNodeHost)tn; list.Add(lc.IP); if (lc.Tag != null) { ((ListViewItem)lc.Tag).Remove(); } } // Удаляем группу "Не в списке" node.Remove(); // проверяем на всякий пожарный, не пустое ли дерево справочника if (this.treeViewObject.Nodes.Count > 0) { this.treeViewObject.BeginUpdate(); foreach (string st in list) { // Ищем принадлежность ПК к какой либо сети LCTreeNodeSubnet lcSubnet = this.lCDirectory.FindSubnetIP(st); if (lcSubnet != null) { // и сразу же выделяем этот объект this.OpenLCTreeNode(lcSubnet.AddHost(st, st, "")); } else { LCTreeNodeNoList lcNoList = lCDirectory.ReturnGroupNoList(); // и сразу же выделяем этот объект this.OpenLCTreeNode(lcNoList.AddHost(st, st, "")); } } this.treeViewObject.EndUpdate(); } }
private void FindAndOpenHost(string st) { if (this.lCDirectory.CorrectIP(ref st)) { this.toolStripTextBoxIP.Text = st; this.WriteListBox("Поиск компьютера с IP " + this.toolStripTextBoxIP.Text + " запущен."); LCTreeNodeHost lcHost = this.lCDirectory.FindHost(st); if (lcHost != null) { //Выделяем найденый хост в дереве LCDirectory.treeView.SelectedNode = lcHost; this.OpenLCTreeNode(lcHost); this.WriteListBox("Найден хост с именем: " + lcHost.Text + "."); } else { //Определяем принадлежность хоста сети LCTreeNodeSubnet findSubnet = this.lCDirectory.FindSubnetIP(st); if (findSubnet != null) { this.OpenLCTreeNode(findSubnet.AddHost(st, st, "")); this.WriteListBox("IP адрес " + st + " принадлежит сети " + findSubnet.Text); } else { LCTreeNodeNoList lcNoList = (LCTreeNodeNoList)this.lCDirectory.ReturnGroupNoList(); //добавляем хост и сразу же выделяем этот объект this.OpenLCTreeNode(lcNoList.AddHost(st, st, "")); this.WriteListBox("IP адрес " + st + " добавлен в группу " + lcNoList.Text); } } } else { this.WriteListBox("Введенное значение не является IP адресом"); } }
private XElement SaveChildren(LCTreeNode item, XElement current) { LCTreeNode xnodWorking; switch (item.LCObjectType) { case LCObjectType.Group: { if (item.Name != "Root") { LCTreeNodeGroup lcGroup = (LCTreeNodeGroup)item; XElement xElement = new XElement("Group", new XAttribute("NameGroup", lcGroup.Text), new XAttribute("Description", lcGroup.Description)); current = xElement; } } break; case LCObjectType.Host: { LCTreeNodeHost lcHost = (LCTreeNodeHost)item; XElement xElement = new XElement("Host", new XAttribute("TypeHost", lcHost.TypeHost.ToString()), new XAttribute("NameHost", lcHost.Text), new XAttribute("IP", lcHost.IP), new XAttribute("Barcode", lcHost.Barcode), new XAttribute("Login", lcHost.Login), new XAttribute("Password", lcHost.Password), new XAttribute("Description", lcHost.Description));; current = xElement; } break; case LCObjectType.NoList: { LCTreeNodeNoList lcNoList = (LCTreeNodeNoList)item; XElement xElement = new XElement("NoList", new XAttribute("NameGroup", lcNoList.Text), new XAttribute("Description", lcNoList.Description)); current = xElement; } break; case LCObjectType.SubNet: { LCTreeNodeSubnet lcSubnet = (LCTreeNodeSubnet)item; XElement xElement = new XElement("Subnet", new XAttribute("NameSubnet", lcSubnet.Text), new XAttribute("IPSubnet", lcSubnet.IPSubnet), new XAttribute("MaskSubnet", lcSubnet.MaskSubnet), new XAttribute("Description", lcSubnet.Description)); current = xElement; } break; } //рекурсивный перебор всех дочерних узлов if (item.Nodes.Count > 0) { xnodWorking = (LCTreeNode)item.FirstNode; while (xnodWorking != null) { current.Add(SaveChildren(xnodWorking, current)); xnodWorking = (LCTreeNode)xnodWorking.NextNode; } } return(current); }
/// <summary> /// Метод добавления дочерних узлов в дерево /// </summary> /// <param name="xnod">XML элемент</param> /// <param name="newNode">Компонент TreeNode в котором создаются узлы</param> private void AddChildrenDOMXML(XElement xnod, TreeNode newNode) { if (xnod.NodeType == System.Xml.XmlNodeType.Element) { switch (xnod.Name.ToString()) { case "Group": { LCTreeNodeGroup lcTreeNodeGroup = new LCTreeNodeGroup { Text = xnod.Attribute("NameGroup").Value, Description = xnod.Attribute("Description").Value, ContextMenuStrip = LCTreeNode.groupContextMemuStrip, ImageIndex = 2 }; newNode.Nodes.Add(lcTreeNodeGroup); lcTreeNodeGroup.UpdateLC(); newNode = lcTreeNodeGroup; } break; case "NoList": { LCTreeNodeNoList lcTreeNodeNoList = new LCTreeNodeNoList { Text = xnod.Attribute("NameGroup").Value, Description = xnod.Attribute("Description").Value, ContextMenuStrip = LCTreeNode.noListContextMenuStrip, ImageIndex = 2 }; lcTreeNodeNoList.ToolTipText += lcTreeNodeNoList.Text; lcTreeNodeNoList.ToolTipText += "\n" + lcTreeNodeNoList.Description; newNode.Nodes.Add(lcTreeNodeNoList); newNode = lcTreeNodeNoList; } break; case "Host": { LCTreeNodeHost lcTreeNodeHost = new LCTreeNodeHost { Text = xnod.Attribute("NameHost").Value, IP = xnod.Attribute("IP").Value, Barcode = xnod.Attribute("Barcode").Value, Login = xnod.Attribute("Login").Value, Password = xnod.Attribute("Password").Value, Description = xnod.Attribute("Description").Value, TypeHost = (LCTypeHost)Enum.Parse(typeof(LCTypeHost), xnod.Attribute("TypeHost").Value), ContextMenuStrip = LCTreeNode.computerContextMenuStrip }; newNode.Nodes.Add(lcTreeNodeHost); lcTreeNodeHost.UpdateLC(); return; } case "Subnet": { LCTreeNodeSubnet lcTreeNodeSubnet = new LCTreeNodeSubnet { Text = xnod.Attribute("NameSubnet").Value, IPSubnet = xnod.Attribute("IPSubnet").Value, MaskSubnet = xnod.Attribute("MaskSubnet").Value, Description = xnod.Attribute("Description").Value, ContextMenuStrip = LCTreeNode.subnetContextMenuStrip, ImageIndex = 5 }; newNode.Nodes.Add(lcTreeNodeSubnet); lcTreeNodeSubnet.UpdateLC(); newNode = lcTreeNodeSubnet; } break; case "Root": { //MessageBox.Show("yes"); //newNode.ImageIndex = 1; //newNode.Text = mapAttributes.Item(1).Value; } break; } foreach (XElement element in xnod.Elements()) { AddChildrenDOMXML(element, newNode); } } }
/// <summary> /// Событие удаления объекта LC /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void DeleteLCTreeNode(object sender, EventArgs e) { LCTreeNode lcTreeNode = (LCTreeNode)this.treeViewObject.SelectedNode; string tempStr = lcTreeNode.Text; // Проверяем есть ли у этого узла дочерние объекты if (lcTreeNode.Nodes.Count > 0) { // надо перебрать все узлы if (MessageBox.Show("Объект имеет дочерние узлы! Все равно удалить?", "Удаление", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes) { // Здесь нужен код для удаления из таблиц объектов, которые являются дочерними по отношению к удаляемому объекту // Удаляем текущий //lcTreeNode.Remove(); MessageBox.Show("Пока не реализовано удаление элементов с дочерними объектами!"); // Сообщаем об удалении this.WriteListBox("Группа " + tempStr + " и её дочерние объекты удалены."); } } else { if (MessageBox.Show("Вы дейстительно хотите удалить этот объект ?", "Удаление", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes) { switch (lcTreeNode.LCObjectType) { case LCObjectType.Host: { LCTreeNodeHost lcHost = (LCTreeNodeHost)lcTreeNode; lcHost.RemoveLC(); tempStr = "Компьютер: " + tempStr + " удалён."; // Сообщаем об удалении this.WriteListBox(tempStr); break; } case LCObjectType.SubNet: { LCTreeNodeSubnet lcSubnet = (LCTreeNodeSubnet)lcTreeNode; lcSubnet.RemoveLC(); tempStr = "Сеть: " + tempStr + " удалена."; this.WriteListBox(tempStr); break; } case LCObjectType.Group: { LCTreeNodeGroup lcGroup = (LCTreeNodeGroup)lcTreeNode; lcGroup.RemoveLC(); tempStr = "Группа: " + tempStr + " удалена."; this.WriteListBox(tempStr); break; } case LCObjectType.NoList: { LCTreeNodeNoList lcNoList = (LCTreeNodeNoList)lcTreeNode; lcNoList.Remove(); tempStr = "Группа: " + tempStr + " удалена."; this.WriteListBox(tempStr); break; } } } } }