Beispiel #1
0
 private void ErrorLogTextBox_DoubleClick(object sender, EventArgs e)
 {
     if (Analizer.tokenizerLastErrorPos != 0)
     {
         InputTextBox.Focus();
         InputTextBox.Select(Analizer.tokenizerLastErrorPos, 1);
     }
 }
        /// <summary>
        /// Sets initial form state.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Form1_Load_1(object sender, EventArgs e)
        {
            InputTextBox.Text = "0";
            InputTextBox.Select(InputTextBox.Text.Length, 0);

            Value           = 0;
            Operation       = "";
            Function        = "";
            OperatorPressed = false;

            OneButton.Click   += new EventHandler(Num_Click);
            TwoButton.Click   += new EventHandler(Num_Click);
            ThreeButton.Click += new EventHandler(Num_Click);
            FourButton.Click  += new EventHandler(Num_Click);
            FiveButton.Click  += new EventHandler(Num_Click);
            SixButton.Click   += new EventHandler(Num_Click);
            SevenButton.Click += new EventHandler(Num_Click);
            EightButton.Click += new EventHandler(Num_Click);
            NineButton.Click  += new EventHandler(Num_Click);
            ZeroButton.Click  += new EventHandler(Num_Click);
            DotButton.Click   += new EventHandler(Num_Click);

            AddButton.Click      += new EventHandler(Operator_Click);
            SubtractButton.Click += new EventHandler(Operator_Click);
            MultiplyButton.Click += new EventHandler(Operator_Click);
            DivideButton.Click   += new EventHandler(Operator_Click);

            SqrtButton.Click      += new EventHandler(Function_Click);
            RecipButton.Click     += new EventHandler(Function_Click);
            PlusMinusButton.Click += new EventHandler(Function_Click);

            EqualsButton.Click  += new EventHandler(EqualsButton_Click);
            BackButton.Click    += new EventHandler(BackButton_Click);
            CEButton.Click      += new EventHandler(CEButton_Click);
            ClearButton.Click   += new EventHandler(ClearButton_Click);
            HistoryButton.Click += new EventHandler(HistoryButton_Click);
        }
Beispiel #3
0
        private void InputTextBox_SelectionChanged(object sender, EventArgs e)
        {
            if (selectChanged)
            {
                selectChanged = false;
                int view       = InputTextBox.SelectionStart - 1;
                int initLength = InputTextBox.SelectionLength;
                InputTextBox.SelectAll();
                InputTextBox.SelectionBackColor = Color.White;
                InputTextBox.BackColor          = Color.White;

                Color col = Color.LightGray;

                string text = InputTextBox.Text;

                int         singleQuote        = -1;                //Позиция текущей открывающей одинарной кавычки. Если -1, то открывающей кавычки нет.
                int         doubleQuote        = -1;                //Позиция текущей открывающей двойной   кавычки. Если -1, то открывающей кавычки нет.
                int         openBrackets       = 0;                 //Количество открытых скобок.
                int         highlightedBracket = 0;                 //Номер подсвеченной открытой скобки (на которой стоит указатель).
                Stack <int> bracketsPos        = new Stack <int>(); //Стек позиций текущих открытых скобок.

                string highlight = null;                            //Указатель на то, какой символ следует подсветить.

                for (int i = 0; i < text.Length; i++)
                {
                    //Если одинарная кавычка...
                    if (text[i] == '\'')
                    {
                        //...и двойная кавычка не открыта...
                        if (doubleQuote == -1)
                        {
                            //...и одинарная кавычка не открыта...
                            if (singleQuote == -1)
                            {
                                //...то это открывающая одинарная кавычка. Запоминаем номер.
                                singleQuote = i;
                                //Если курсор на открывающей одинарной кавычке...
                                if (view == i)
                                {
                                    //То следует искать следующую одинарную кавычку.
                                    highlight = "singleQuote";
                                    //Подсветим текущую кавычку.
                                    InputTextBox.Select(i, 1);
                                    InputTextBox.SelectionBackColor = col;
                                }
                                //...иначе ничего не происходит.
                            }
                            //...но одинарная кавычка уже открыта...
                            else
                            {
                                //...то это закрывающая одинарная кавычка.
                                //Если подсвеченная одиночная кавычка уже была...
                                if (highlight == "singleQuote")
                                {
                                    //...подсвечиваем вторую и уходим отсюда.
                                    InputTextBox.Select(i, 1);
                                    InputTextBox.SelectionBackColor = col;
                                    break;
                                }
                                //...если её не было, но нужно подсветить эту...
                                else if (view == i)
                                {
                                    //...вспоминаем номер предыдущей одинарной кавычки и подсвечиваем обе.
                                    InputTextBox.Select(singleQuote, 1);
                                    InputTextBox.SelectionBackColor = col;
                                    InputTextBox.Select(i, 1);
                                    InputTextBox.SelectionBackColor = col;
                                    break;
                                }
                                //...иначе просто закрываем одинарную кавычку.
                                singleQuote = -1;
                            }
                        }
                        //...а если двойная кавычка открыта, то одинарная кавычка - это текст.
                        else
                        {
                            continue;
                        }
                    }
                    //Если двойная кавычка...
                    else if (text[i] == '"')
                    {
                        //...и одинарная кавычка уже открыта...
                        if (singleQuote >= 0)
                        {
                            //...и двойная кавычка не открыта...
                            if (doubleQuote == -1)
                            {
                                //...то это открывающая двойная кавычка. Запоминаем номер.
                                doubleQuote = i;
                                //Если курсор на открывающей двойной кавычке...
                                if (view == i)
                                {
                                    //То следует искать следующую двойную кавычку.
                                    highlight = "doubleQuote";
                                    //Подсветим текущую кавычку.
                                    InputTextBox.Select(i, 1);
                                    InputTextBox.SelectionBackColor = col;
                                }
                                //...иначе ничего не происходит.
                            }
                            //...но двойная кавычка уже открыта...
                            else
                            {
                                //...то это закрывающая двойная кавычка.
                                //Если подсвеченная двойная кавычка уже была...
                                if (highlight == "doubleQuote")
                                {
                                    //...подсвечиваем вторую и уходим отсюда.
                                    InputTextBox.Select(i, 1);
                                    InputTextBox.SelectionBackColor = col;
                                    break;
                                }
                                //...если её не было, но нужно подсветить эту...
                                else if (view == i)
                                {
                                    //...вспоминаем номер предыдущей одинарной кавычки и подсвечиваем обе.
                                    InputTextBox.Select(doubleQuote, 1);
                                    InputTextBox.SelectionBackColor = col;
                                    InputTextBox.Select(i, 1);
                                    InputTextBox.SelectionBackColor = col;
                                    break;
                                }
                                //...иначе просто закрываем двойную кавычку.
                                doubleQuote = -1;
                            }
                        }
                        //...а если одинарная кавычка не открыта, то двойной быть просто не может.
                        else
                        {
                            break;
                        }
                    }
                    //Если открывающая скобка...
                    else if (text[i] == '(')
                    {
                        //...если одиночная кавычка открыта...
                        if (singleQuote >= 0)
                        {
                            //... а двойная кавычка - не открыта...
                            if (doubleQuote == -1)
                            {
                                //...открываем скобку. Стало на одну открытую скобку больше.
                                openBrackets++;
                                //Записываем положение открытой скобки в стек.
                                bracketsPos.Push(i);
                                //Если курсор на открывающей скобке...
                                if (view == i)
                                {
                                    //То следует искать соответствующую ей закрывающую скобку (после закрытия (!) которой openBrackets станет равен highlightedBracket - 1).
                                    highlight          = "openBracket";
                                    highlightedBracket = openBrackets;
                                    //Подсветим текущую скобку.
                                    InputTextBox.Select(i, 1);
                                    InputTextBox.SelectionBackColor = col;
                                }
                                //...иначе ничего не происходит.
                            }
                            //...а если двойная кавычка открыта, то скобка - это текст.
                            else
                            {
                                continue;
                            }
                        }
                        //...иначе скобки быть просто не может.
                        else
                        {
                            break;
                        }
                    }
                    //Если закрывающая скобка...
                    else if (text[i] == ')')
                    {
                        //...если одиночная кавычка открыта...
                        if (singleQuote >= 0)
                        {
                            //... а двойная кавычка - не открыта...
                            if (doubleQuote == -1)
                            {
                                //...и если уже была подсвечена открывающая скобка, и текущий номер открытой скобки - номер подсвеченной скобки...
                                if (highlight == "openBracket" && highlightedBracket == openBrackets)
                                {
                                    //...то подсвечиваем текущую закрывающую скобку (она как раз намеривается закрыть подсвеченную открытую скобку)
                                    InputTextBox.Select(i, 1);
                                    InputTextBox.SelectionBackColor = col;
                                    break;
                                }
                                //...если ещё не было подсвеченной скобки, но указатель как раз на текущей закрывающей скобке...
                                else if (view == i)
                                {
                                    //...то необходимо подсветить соответствующую ей открывающую скобку. Также подсвечиваем текущую закрывающую скобку.
                                    InputTextBox.Select(bracketsPos.Pop(), 1);
                                    InputTextBox.SelectionBackColor = col;
                                    InputTextBox.Select(i, 1);
                                    InputTextBox.SelectionBackColor = col;
                                    break;
                                }
                                //...иначе просто закрываем скобку (удаляем из стека более неактуальное положение последней открытой скобки и уменьшаем количество открытых скобок).
                                bracketsPos.Pop();
                                openBrackets--;
                            }
                            //...а если двойная кавычка открыта, то скобка - это текст.
                            else
                            {
                                continue;
                            }
                        }
                        //...иначе скобки быть просто не может.
                        else
                        {
                            break;
                        }
                    }
                    //Иначе это просто какой-то символ, который никак не нужно выделять или запоминать. Пропускаем.
                }

                InputTextBox.SelectionStart     = view + 1;
                InputTextBox.SelectionLength    = initLength;
                InputTextBox.SelectionBackColor = Color.White;
                selectChanged = true;
            }
        }