/// <summary>Получение блоков формулы математического вычисления</summary>
        /// <param name="a_Elements">Список элементов</param>
        /// <param name="a_Formula">Формула</param>
        public Cl_FormulaMathematicalBlock[] f_GetMathematicalsBlocks(Cl_Element[] a_Elements, string a_Formula)
        {
            string formula = a_Formula;
            var    blocks  = new List <Cl_FormulaMathematicalBlock>();

            while (!string.IsNullOrWhiteSpace(formula))
            {
                Cl_FormulaMathematicalBlock block = f_GetFirstMathematicalBlockFromText(a_Elements, formula);
                if (block != null)
                {
                    string text = block.f_GetTextFromBlock();
                    if (string.IsNullOrWhiteSpace(text))
                    {
                        return(null);
                    }
                    blocks.Add(block);
                    string txtBlock = block.f_GetTextFromBlock();
                    formula = formula.Substring(txtBlock.Length);
                }
                else
                {
                    return(null);
                }
            }
            return(blocks.ToArray());
        }
Esempio n. 2
0
        /// <summary>Удаление блока из формулы</summary>
        /// <param name="a_Block">Блок</param>
        private bool f_RemoveBlock(Cl_FormulaMathematicalBlock 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);
        }
Esempio n. 3
0
        private void ctrlBDelLastAction_Click(object sender, EventArgs e)
        {
            if (m_Blocks.Count == 0)
            {
                return;
            }
            Cl_FormulaMathematicalBlock lastBlock = m_Blocks.LastOrDefault();

            f_RemoveBlock(lastBlock);
            f_UpdateControls(!m_VisibilityFormula);
        }
        /// <summary>Проверка корректности формулы математической операции</summary>
        public bool f_Valid(ICollection <Cl_FormulaMathematicalBlock> a_Blocks)
        {
            Cl_FormulaMathematicalBlock block = a_Blocks.LastOrDefault();

            if (block != null)
            {
                return(!block.p_IsOperand);
            }
            else
            {
                return(true);
            }
        }
Esempio n. 5
0
        // <summary>Добавление блока в формулу</summary>
        /// <param name="a_Block">Блок</param>
        /// <returns></returns>
        private bool f_AppendBlock(Cl_FormulaMathematicalBlock a_Block)
        {
            if (a_Block == null)
            {
                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);
        }