Как отключить выделение в TextBox - PullRequest
5 голосов
/ 14 сентября 2011

Я хочу отключить выделение текста и щелчок в середине текста в TextBox, но пользователь должен иметь возможность ввести этот TextBox и написать в конце более раннего текста, поэтому я не могу сделать его ReadOnly или Enable = false.

Я пытаюсь обработать MouseDown и делаю следующее:

input.Select(input.Text.Length, 0);

Помогает поместить курсор в середину текста, но пользователь все еще может сделать выбор изконец.

Я также делаю MessageBox() на MouseDown событии, но в этом случае пользователь не может нажать на textBox и ничего написать.

Последняя попытка была установить focus() в другом Контроле и вернитесь назад, через некоторое время, но это не сработало вообще.Пользователь по-прежнему может сделать выбор.

Как я могу это сделать?

Ответы [ 3 ]

5 голосов
/ 14 сентября 2011

Как насчет этого для Click события

Редактировать: Сделайте то же самое для DoubleClick и MouseLeave, чтобы охватить все случаи. Вы можете иметь общий обработчик событий.

    private void textBox1_Click(object sender, EventArgs e)
    {
        ((TextBox) sender).SelectionLength = 0;
    }
2 голосов
/ 14 сентября 2011

Если он подходит для пользовательского интерфейса / пользовательской модели, другой подход заключается в использовании двух текстовых полей: доступного только для чтения с предыдущим текстом, который пользователь может увидеть и обработать (если это то, что ему нужно сделать) и редактируемый для нового текста вместе с кнопкой для фиксации нового текста в текстовом поле только для чтения (и в слое постоянства).

Этот подход не только, пожалуй, более удобен для пользователя & mdash; редактируемый блок полностью редактируемый, а не просто "дополняемый", что сбивает с толку, когда пользователь нажимает кнопку Backspace & mdash; он также требует меньше усилий с платформой, чтобы заставить блоки делать то, что нужно. тебе нужно.

1 голос
/ 14 сентября 2011

Вы не за горами с вашим обработчиком событий MouseDown, но, вероятно, лучше поймать MouseUp, поскольку это событие сработает, когда они закончат выбор.

Кроме того, вы можете перехватить событие SelectionChanged.

Просто поставьте:

input.Select (input.Text.Length, 0);

код в любом из этих обработчиков событий.

...