Позиция каретки в TextBox`е

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Позиция каретки в TextBox`е

Сообщение MIT » 14.04.2009 (Вт) 16:56

Решение задачи не столь важно, но мне все же оно интересно.

Задача: узнать текужее положение каретки текстбокса. Я сразу подумал о SelectionStart, но немного его поюзав заметил баг.
Создайте форму с текстбоксом, наишите код
Код: Выделить всё
    Private Sub TextBox1_KeyDown(ByVal sender As Object, ByVal e As Object) Handles TextBox1.KeyDown, TextBox1.MouseDown
        Me.Text = TextBox1.SelectionStart
    End Sub

введите какой-нибудь текст и следите за заголовком формы.
Дальше делаем так:
1) ставим каретку мышью перед текстом (в самое начало), видим 0
2) нажимаем кнопку "вправо", видим 0 (!)
3) нажимаем кнопку "вправо", видим 1
повторяем действие 3 и видим, что позиция увеличивается нормально
4) "дойдите" таким образом символа, при котором в заголовке будет 5
5) нажмите "налево", в заголовке 6 (!!!)
6) нажмите "налево" еще несколько раз, позиция уменьшается нормально

Вопрос: так и надо? Или есть более нормальные способы определения местоположения каретки?
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

karlex
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 138
Зарегистрирован: 30.03.2009 (Пн) 20:25
Откуда: Пермский край, г.Кунгур

Re: Позиция каретки в TextBox`е

Сообщение karlex » 14.04.2009 (Вт) 17:18

Замени Down на Up и проведи те же тесты.
Все гениальное — просто!
-------------------------------------
Кто ищет — тот всегда найдет!
-------------------------------------
Лень — двигатель прогресса.
Прогресс — двигатель лени.

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Позиция каретки в TextBox`е

Сообщение MIT » 14.04.2009 (Вт) 17:35

:lol:
Только одно не понятно: а где логика?
Да, а как добиться верного результата при Down`е?
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

karlex
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 138
Зарегистрирован: 30.03.2009 (Пн) 20:25
Откуда: Пермский край, г.Кунгур

Re: Позиция каретки в TextBox`е

Сообщение karlex » 14.04.2009 (Вт) 18:17

MIT писал(а):Только одно не понятно: а где логика?

Действительно :lol:
Не смеши :)
Все гениальное — просто!
-------------------------------------
Кто ищет — тот всегда найдет!
-------------------------------------
Лень — двигатель прогресса.
Прогресс — двигатель лени.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Позиция каретки в TextBox`е

Сообщение iGrok » 14.04.2009 (Вт) 21:30

MIT писал(а)::lol:
Только одно не понятно: а где логика?
Да, а как добиться верного результата при Down`е?

Никак. Логика в том, что (практически)любое действие происходит не при нажатии, а при отпускании клавиши. Это вроде давно известная фишка..
label:
cli
jmp label

Williams
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1280
Зарегистрирован: 06.05.2008 (Вт) 18:35
Откуда: System.Reflection.Williams (увидел себя в зеркале :))

Re: Позиция каретки в TextBox`е

Сообщение Williams » 15.04.2009 (Ср) 1:14

Если кому интересно как установить позицию каретки. Найти решение в документации было довольно-таки непросто.

Код: Выделить всё
        With targetTextBox
            If Not String.IsNullOrEmpty(.Text) Then
                .SelectionStart = .Text.Length
                .SelectionLength = 0
            End If
        End With


Фича в нулевом SelectionLength.
И вы думаете, что вас оставят в живых после прочтения этого поста?

karlex
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 138
Зарегистрирован: 30.03.2009 (Пн) 20:25
Откуда: Пермский край, г.Кунгур

Re: Позиция каретки в TextBox`е

Сообщение karlex » 15.04.2009 (Ср) 10:47

Williams писал(а):Если кому интересно как установить позицию каретки. Найти решение в документации было довольно-таки непросто.
Фича в нулевом SelectionLength.

:shock:
Тоже самое и в TextBox'е VB6.
Все гениальное — просто!
-------------------------------------
Кто ищет — тот всегда найдет!
-------------------------------------
Лень — двигатель прогресса.
Прогресс — двигатель лени.


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 38

    TopList