public FormEditSubnet(TreeNode treeNode, ModeForm modeForm) { InitializeComponent(); this.modeForm = modeForm; switch (this.modeForm) { case ModeForm.Edit: { this.lcTreeNodeSubnet = (LCTreeNodeSubnet)treeNode; this.Text = "Сеть : " + this.lcTreeNodeSubnet.Text; this.textBoxNameSubnet.Text = this.lcTreeNodeSubnet.Text; this.textBoxIPSubnet.Text = this.lcTreeNodeSubnet.IPSubnet; this.textBoxMaskSubnet.Text = this.lcTreeNodeSubnet.MaskSubnet; this.textBoxDescription.Text = this.lcTreeNodeSubnet.Description; this.buttonAddSubnet.Text = "Сохранить"; break; } case ModeForm.New: { this.lcTreeNodeGroup = (LCTreeNodeGroup)treeNode; this.textBoxNameSubnet.Text = "Новая сеть"; break; } } }
private void ButtonSaveGroup_Click(object sender, EventArgs e) { if (this.textBoxNameGroup.Text != "") { switch (this.modeForm) { case ModeForm.New: { this.lcTreeNode = this.lcTreeNodeGroup.AddGroup(this.textBoxNameGroup.Text, this.textBoxDescription.Text); break; } case ModeForm.Edit: { this.lcTreeNodeGroup.Text = this.textBoxNameGroup.Text; this.lcTreeNodeGroup.Description = this.textBoxDescription.Text; this.lcTreeNodeGroup.UpdateLC(); break; } } this.Close(); } else { this.labelErrorMessage.Text = "Не задано имя группы"; } }
/// <summary> /// Поиск группы по имени /// </summary> /// <param name="nameGroup">Имя сети</param> /// <returns>Возвращает найденую группу</returns> public LCTreeNodeGroup FindGroup(string nameGroup) { foreach (LCTreeNode node in AllLCTreeNode(treeView.Nodes)) { if (node.LCObjectType == LCObjectType.Group) { LCTreeNodeGroup lcGroup = (LCTreeNodeGroup)node; if (lcGroup.Text == nameGroup) { this.WriteListBox("Найдена группа с именем: " + lcGroup.Text + "."); return(lcGroup); } } } return(null); }
/// <summary> /// Метод добавления дочерней группы /// </summary> /// <param name="nameGroup">Имя группы</param> /// <param name="description">Описание группы</param> /// <returns>Возвращает созданную группу</returns> public LCTreeNodeGroup AddGroup(string nameGroup, string description) { // создаем новый узел Group LCTreeNodeGroup lcTreeNodeGroup = new LCTreeNodeGroup { Text = nameGroup, Description = description, ContextMenuStrip = LCTreeNode.groupContextMemuStrip, ImageIndex = 2 }; lcTreeNodeGroup.ToolTipText += nameGroup; lcTreeNodeGroup.ToolTipText += "\n" + description; this.Nodes.Add(lcTreeNodeGroup); this.WriteListBoxOperation("Добавлена группа : " + nameGroup); return(lcTreeNodeGroup); }
/// <summary> /// Метод создания модели DOM на основе текста /// </summary> public void CreateDOMXML(string fileName) { this.fileData = fileName; treeView.Nodes.Clear(); XDocument xmlDocument; if (File.Exists(this.fileData)) { //Создаём резевную копию файла с данными о компьютерах //Формируем путь в файлу резервной копии string backupFileName = Application.LocalUserAppDataPath; backupFileName += "\\Backup\\LCDirectory.xml." + DateTime.Today.ToShortDateString() + ".backup"; //Проверяем была ли уже сделана резервная копия сегодня if (!(File.Exists(backupFileName))) { //формируем пусь к паке backup string backupDirectory = Application.LocalUserAppDataPath + "\\Backup"; //Создаём папку backup Directory.CreateDirectory(backupDirectory); //Создаём резервную копию File.Copy(this.fileData, backupFileName); } try { // Загружаем XML файл xmlDocument = XDocument.Load(this.fileData); } catch (Exception e) { this.WriteListBox("Ошибка загрузки файла: " + e.Message); LCTreeNodeGroup lcTreeRootError = new LCTreeNodeGroup { Text = "!", // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! // Здесь возможна загрузка специальной иконки обозначающей сбой ImageIndex = 1 }; treeView.Nodes.Add(lcTreeRootError); //lcTreeRootError.ContextMenuStrip = this.contextMenuStripLCRoot; this.WriteListBox("Справочник не загружен. Закройте приложение и проверьте корректность файла!"); this.correctLoad = false; return; } } else { this.WriteListBox("Файл справочника не найден!"); xmlDocument = new XDocument( new XDeclaration("1.0", "windows-1251", "yes"), new XElement("Root")); this.WriteListBox("Создан новый, пустой справочник."); } // Получаем корневой узел элемента XElement xnodDE = xmlDocument.Root; // Здесь надо правильно настроить этот узел LCTreeNodeGroup lcTreeRoot = new LCTreeNodeGroup { Name = "Root", Text = ".", Description = "Корневой узел справочника.", ContextMenuStrip = LCTreeNode.rootContextMenuStrip, ImageIndex = 1 }; // И добавить его в дерево treeView.Nodes.Add(lcTreeRoot); treeView.BeginUpdate(); //рекурсивный обход дерева AddChildrenDOMXML(xnodDE, lcTreeRoot); // Сортируем объекты в дереве treeView.Sort(); treeView.EndUpdate(); this.WriteListBox("Справочник успешно загружен."); // открываем дочерние узлы узла root lcTreeRoot.Expand(); }
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; } } } } }
/// <summary> /// Метод открытия узла дерева. /// </summary> /// <param name="treeNode">Открываемый узел.</param> private void OpenLCTreeNode(TreeNode treeNode) { if (treeNode == null) { return; } LCTreeNode lcTreeNode = (LCTreeNode)treeNode; switch (lcTreeNode.LCObjectType) { case LCObjectType.Host: { this.tabControlObject.SelectedTab = this.tabPageHosts; LCTreeNodeHost lcHost = (LCTreeNodeHost)lcTreeNode; // Делаем активным список хостов this.listViewHosts.Focus(); foreach (ListViewItem curilv in this.listViewHosts.Items) { if (curilv.Tag == lcHost) { // Выделяем нужный элемент в списке curilv.Selected = true; return; } } // определяем родительскую группу элемента LCTreeNode lcNode = (LCTreeNode)lcHost.Parent; // Пока сделано так, в будущем предполагаются что ПК состоят только в сетях. Кроме группы <Не в списке> if (lcNode.LCObjectType == LCObjectType.SubNet) { ListViewGroup lvg = null; foreach (ListViewGroup curGroup in this.listViewHosts.Groups) { if (curGroup.Tag == lcNode) { // Группа существует lvg = curGroup; break; } } if (lvg == null) { // Такой группы еще нет, надо её создать lvg = new ListViewGroup(lcNode.Text); } lvg.Tag = lcNode; this.listViewHosts.Groups.Add(lvg); ListViewItem lvi = new ListViewItem(new string[] { lcHost.TypeHost.ToString(), lcHost.IP, lcHost.Text, lcHost.ParentGroup, lcHost.DescriptionStr }, lvg) { Tag = lcHost }; lcHost.Tag = lvi; this.listViewHosts.Items.Add(lvi); lcHost.UpdateLC(); lvi.Selected = true; } else { ListViewItem lvi = new ListViewItem(new string[] { lcHost.TypeHost.ToString(), lcHost.IP, lcHost.Text, lcHost.ParentGroup, lcHost.DescriptionStr }) { Tag = lcHost }; lcHost.Tag = lvi; this.listViewHosts.Items.Add(lvi); lcHost.UpdateLC(); lvi.Selected = true; } break; } case LCObjectType.SubNet: { this.tabControlObject.SelectedTab = this.tabPageSubnets; this.listViewSubnets.Focus(); LCTreeNodeSubnet lcSubnet = (LCTreeNodeSubnet)lcTreeNode; foreach (ListViewItem cutilv in this.listViewSubnets.Items) { if (cutilv.Tag == lcSubnet) { cutilv.Selected = true; return; } } ListViewItem lvi = new ListViewItem(new string[] { lcSubnet.Text, lcSubnet.IPSubnet, lcSubnet.MaskSubnet, lcSubnet.ParentGroup, lcSubnet.DescriptionStr }) { Tag = lcSubnet }; lcSubnet.Tag = lvi; this.listViewSubnets.Items.Add(lvi); lvi.Selected = true; break; } case LCObjectType.Group: { this.tabControlObject.SelectedTab = this.tabPageGroups; this.listViewGroups.Focus(); LCTreeNodeGroup lcGroup = (LCTreeNodeGroup)lcTreeNode; foreach (ListViewItem curilv in this.listViewGroups.Items) { if (curilv.Tag == lcGroup) { curilv.Selected = true; return; } } ListViewItem lvi = new ListViewItem(new string[] { lcGroup.Text, lcGroup.ParentGroup, lcGroup.DescriptionStr }) { Tag = lcGroup }; lcGroup.Tag = lvi; this.listViewGroups.Items.Add(lvi); lvi.Selected = true; break; } } }