/// <summary> /// Обработать событие при закрытии дочерней формы /// </summary> private void ChildFormClosed(object sender, FormClosedEventArgs e) { // очистка ссылки на форму, связанную с узлом дерева IWinControllable itfWin = sender as IWinControllable; TreeNode treeNode = itfWin == null || itfWin.WinInfo == null ? null : itfWin.WinInfo.TreeNode; if (treeNode == null) { foreach (TreeNode node in allNodes) { NodeInfo nodeInfo = node.Tag as NodeInfo; if (nodeInfo != null && nodeInfo.Form == sender) { nodeInfo.Form = null; break; } } } else { NodeInfo nodeInfo = treeNode.Tag as NodeInfo; if (nodeInfo != null) { nodeInfo.Form = null; } } }
/// <summary> /// Выполнить действие, связанное с узлом дерева /// </summary> private void ExecNodeAction(TreeNode node) { NodeInfo nodeInfo = node.Tag as NodeInfo; if (nodeInfo != null) { if (nodeInfo.Form == null) { FrmTable frmTable = null; string imageKey = "table.gif"; try { int param = -1; object[] paramArr = nodeInfo.Params; if (paramArr != null && paramArr.Length > 0 && paramArr[0] is int) { param = (int)paramArr[0]; } string nodeText = node.Text; switch (nodeInfo.NodeAction) { case NodeActions.Obj: frmTable = NewTableForm(nodeText, Tables.GetObjTable()); break; case NodeActions.CommLine: frmTable = NewTableForm(nodeText, Tables.GetCommLineTable()); break; case NodeActions.KP: frmTable = NewTableForm(nodeText, Tables.GetKPTable()); break; case NodeActions.InCnl: frmTable = NewTableForm(nodeText, Tables.GetInCnlTable()); frmTable.GridContextMenu = contextInCnls; break; case NodeActions.InCnlObj: frmTable = NewTableForm(CommonPhrases.InCnlTable + " - " + nodeText, Tables.GetInCnlTableByObjNum(param)); frmTable.GridContextMenu = contextInCnls; imageKey = "object.gif"; break; case NodeActions.InCnlKP: frmTable = NewTableForm(CommonPhrases.InCnlTable + " - " + nodeText, Tables.GetInCnlTableByKPNum(param)); frmTable.GridContextMenu = contextInCnls; imageKey = "kp.gif"; break; case NodeActions.CtrlCnl: frmTable = NewTableForm(nodeText, Tables.GetCtrlCnlTable()); break; case NodeActions.CtrlCnlObj: frmTable = NewTableForm(CommonPhrases.CtrlCnlTable + " - " + nodeText, Tables.GetCtrlCnlTableByObjNum(param)); imageKey = "object.gif"; break; case NodeActions.CtrlCnlKP: frmTable = NewTableForm(CommonPhrases.CtrlCnlTable + " - " + nodeText, Tables.GetCtrlCnlTableByKPNum(param)); imageKey = "kp.gif"; break; case NodeActions.Role: frmTable = NewTableForm(nodeText, Tables.GetRoleTable()); break; case NodeActions.User: frmTable = NewTableForm(nodeText, Tables.GetUserTable()); break; case NodeActions.Interface: frmTable = NewTableForm(nodeText, Tables.GetInterfaceTable()); break; case NodeActions.Right: frmTable = NewTableForm(nodeText, Tables.GetRightTable()); break; case NodeActions.CnlType: frmTable = NewTableForm(nodeText, Tables.GetCnlTypeTable()); break; case NodeActions.CmdType: frmTable = NewTableForm(nodeText, Tables.GetCmdTypeTable()); break; case NodeActions.EvType: frmTable = NewTableForm(nodeText, Tables.GetEvTypeTable()); break; case NodeActions.KPType: frmTable = NewTableForm(nodeText, Tables.GetKPTypeTable()); break; case NodeActions.Param: frmTable = NewTableForm(nodeText, Tables.GetParamTable()); break; case NodeActions.Unit: frmTable = NewTableForm(nodeText, Tables.GetUnitTable()); break; case NodeActions.CmdVal: frmTable = NewTableForm(nodeText, Tables.GetCmdValTable()); break; case NodeActions.Format: frmTable = NewTableForm(nodeText, Tables.GetFormatTable()); break; case NodeActions.Formula: frmTable = NewTableForm(nodeText, Tables.GetFormulaTable()); break; } } catch (Exception ex) { AppUtils.ProcError(ex.Message); frmTable = null; } if (frmTable != null) { IWinControllable itfWin = frmTable as IWinControllable; itfWin.WinInfo = new WinInfo(); itfWin.WinInfo.TreeNode = node; frmTable.FormClosed += ChildFormClosed; nodeInfo.Form = frmTable; winControl.AddForm(frmTable, "", ilTree.Images[imageKey]); } } else { winControl.ActivateForm(nodeInfo.Form); } SetItemsEnabledOnWindowAction(); } }