示例#1
0
        private void caret_set_position(long char_index)
        {
            if (char_index < 0)
            {
                //попытка перевести каретку ДО начала текста - ставим каретку на начало
                char_index = 0;
            }

            if ((text_provider != null) && (char_index > text_provider.GetCharsCount()))
            {
                //попытка перевести каретку за границу текста (+1 символ) - пресекаем
                return;
            }

            //вычисляем координаты
            var outside  = false;
            var caret_pt = text_area.GetCaretPosition((int)(char_index - screen_first_char), out outside);

            if (outside) //выходим за пределы отображаемой области - по идее такого быть не должно
            {
                char_index = screen_first_char;
                caret_pt   = text_area.Bounds.Location;
            }

            if (Focused)
            {
                //на самом деле показываем каретку только когда захвачен фокус ввода
                Caret.SetCaretPos(caret_pt);
            }
            char_index_at_caret = char_index;

            //для обновление статусной области
            CharAtCaret = text_area.GetChar((int)(char_index_at_caret - screen_first_char));
            OnViewChanged(new EventArgs());
        }
示例#2
0
        private void caret_set_position(Point pt)
        {
            var char_index_screen = 0;
            var caret_pt          = text_area.GetNearestCaretPosition(pt, out char_index_screen);

            if (Focused)
            {
                Caret.SetCaretPos(caret_pt);
            }
            char_index_at_caret = char_index_screen + screen_first_char;

            CharAtCaret = text_area.GetChar((int)(char_index_at_caret - screen_first_char));
            OnViewChanged(new EventArgs());
        }