/// <summary>Удаление блока из формулы</summary> /// <param name="a_Block">Блок</param> private bool f_RemoveBlock(Cl_FormulaConditionBlock a_Block) { if (a_Block == null) { return(false); } if (ctrlRTBFormula.TextLength == 0) { return(false); } string text = a_Block.f_GetTextFromBlock(); if (string.IsNullOrWhiteSpace(text)) { return(false); } int start = 0; if (text.Length > ctrlRTBFormula.TextLength) { start = 0; } else { start = ctrlRTBFormula.TextLength - text.Length; } ctrlRTBFormula.ReadOnly = false; ctrlRTBFormula.SelectionStart = start; ctrlRTBFormula.SelectionLength = text.Length; ctrlRTBFormula.SelectedText = ""; ctrlRTBFormula.ReadOnly = true; m_Blocks.RemoveAt(m_Blocks.LastIndexOf(a_Block)); return(true); }
/// <summary>Добавление блока в формулу</summary> /// <param name="a_Block">Блок</param> /// <returns></returns> private bool f_AppendBlock(Cl_FormulaConditionBlock a_Block) { if (a_Block == null) { return(false); } if (a_Block.p_Object is string) { string txt = a_Block.p_Object.ToString(); if (m_Blocks.Count < 2) { return(false); } Cl_Element el = m_Blocks[m_Blocks.Count - 2].p_Object as Cl_Element; if (el == null || el.p_IsNumber) { return(false); } Cl_ElementParam prm = el.p_NormValues.FirstOrDefault(val => val.p_Value == txt); if (prm != null) { a_Block.p_Object = prm; } else { prm = el.p_PatValues.FirstOrDefault(val => val.p_Value == txt); if (prm != null) { a_Block.p_Object = prm; } else { return(false); } } } string text = a_Block.f_GetTextFromBlock(); if (string.IsNullOrWhiteSpace(text)) { return(false); } ctrlRTBFormula.SelectionStart = ctrlRTBFormula.TextLength; ctrlRTBFormula.SelectionLength = 0; ctrlRTBFormula.SelectionColor = a_Block.f_GetColorBlock(); ctrlRTBFormula.AppendText(text); ctrlRTBFormula.SelectionColor = ctrlRTBFormula.ForeColor; m_Blocks.Add(a_Block); return(true); }
/// <summary>Проверка корректности формулы отображения элемента</summary> public bool f_Valid(ICollection <Cl_FormulaConditionBlock> a_Blocks) { if (a_Blocks.Count == 1) { return(false); } else { Cl_FormulaConditionBlock block = a_Blocks.LastOrDefault(); if (block != null) { return(!block.p_IsOperand); } else { return(true); } } }
private void ctrlBDelLastAction_Click(object sender, EventArgs e) { if (m_Blocks.Count == 0) { return; } Cl_FormulaConditionBlock lastBlock = m_Blocks.LastOrDefault(); f_RemoveBlock(lastBlock); m_NumberBlockOper--; if (m_Blocks.Count > 1 && m_NumberBlockOper == 3) { if (m_Blocks[m_Blocks.Count - 2].p_Object is Cl_Element) { f_UpdateStandartValues((Cl_Element)m_Blocks[m_Blocks.Count - 2].p_Object); } } f_UpdateControls(m_NumberBlockOper); }
/// <summary>Получение блоков формулы отображения элемента</summary> /// <param name="a_Elements">Список элементов</param> /// <param name="a_Formula">Формула</param> public Cl_FormulaConditionBlock[] f_GetConditionsBlocks(Cl_Element[] a_Elements, string a_Formula) { string formula = a_Formula; var blocks = new List <Cl_FormulaConditionBlock>(); while (!string.IsNullOrWhiteSpace(formula)) { Cl_FormulaConditionBlock block = f_GetFirstConditionBlockFromText(a_Elements, formula); if (block != null) { if (block.p_Object is string) { string txt = block.p_Object.ToString(); if (blocks.Count < 2) { return(null); } Cl_Element el = blocks[blocks.Count - 2].p_Object as Cl_Element; if (el == null || el.p_IsNumber) { return(null); } if (el.p_Tag == "gender") { Cl_User.E_Sex gender; if (Enum.TryParse(block.p_Object.ToString(), true, out gender)) { block.p_Object = gender; } else { return(null); } } else { Cl_ElementParam prm = el.p_NormValues.FirstOrDefault(val => val.p_Value == txt); if (prm != null) { block.p_Object = prm; } else { prm = el.p_PatValues.FirstOrDefault(val => val.p_Value == txt); if (prm != null) { block.p_Object = prm; } else { return(null); } } } } blocks.Add(block); string txtBlock = block.f_GetTextFromBlock(); formula = formula.Substring(txtBlock.Length); } else { return(null); } } return(blocks.ToArray()); }