.NET - Текстовые поля WinForm - Фокус и SelectedText

Всякий раз, когда я устанавливаю фокус на текстовое поле в WinForms (.NET 3.5), выделяется весь текст. Не имеет значения, установлен ли у меня MultiLine в значение true или false. Кажется, это полная противоположность тому, что видит этот пользователь: Создание TextBox WinForms ведет себя как адресная строка вашего браузера

Я пробовал делать:

    private void Editor_Load(object sender, EventArgs e)
    {
       //form load event
       txtName.SelectedText = String.Empty; // has no effect
    }

Есть ли другое свойство, которое я могу настроить, чтобы остановить это надоедливое поведение?

Я только что заметил, что это работает:

        txtName.Select(0,0);
        txtScript.Select(0,0);

Но действительно ли мне нужно вызывать select () для всех моих текстовых полей?


person BuddyJoe    schedule 08.09.2009    source источник
comment
см. комментарии к Кайлу Розендо.   -  person BuddyJoe    schedule 08.09.2009


Ответы (2)


Создайте настраиваемый элемент управления TextBox, который переопределяет событие Enter.

Что-то вроде этого:

using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;

namespace YourNamespace  
{
    class MyTextBox : TextBox
    {

        protected override void OnEnter(EventArgs e) {
            this.Select(0, 0);

            base.OnEnter(e);
        }

    }
}
person Jay Riggs    schedule 08.09.2009
comment
Все хорошо, но это не решает исходную проблему. - person Kyle Rosendo; 08.09.2009
comment
Когда я читаю вопрос, проблема заключается в том, чтобы не допустить, чтобы ряд текстовых полей выделял весь текст при вводе. Мое решение решает эту проблему без особых прыжков с обруча. (Это правда, что в коде OP может быть что-то еще, что делает мое решение неработоспособным, но я думаю, что это стоит рассмотреть). - person Jay Riggs; 08.09.2009

Что ж, вам не нужно использовать Focus(), если вы используете Select(0,0), поэтому я не вижу проблемы? Это все равно заканчивается как один звонок.

person Kyle Rosendo    schedule 08.09.2009
comment
Я думаю, что это происходит только со мной, потому что я устанавливаю значение TextBox.Text до того, как элемент управления будет отрисован. Не имеет значения, делаю ли я это с помощью методов или свойств. Неудивительно, что я этого раньше не замечал. - person BuddyJoe; 08.09.2009
comment
Какое событие формы я могу использовать, чтобы убедиться, что значения моего текстового поля установлены после события рисования формы? - person BuddyJoe; 08.09.2009
comment
Ах я вижу. Когда вы устанавливаете текстовые поля, в конструкторе или в событии загрузки? Если это конструктор, вот в чем проблема. - person Kyle Rosendo; 08.09.2009
comment
Я думаю, это просто предварительная визуализация. Я пробовал это вне конструктора и вне свойств (методов). Если я вызываю два метода до того, как форма станет видимой (показанной), у нее будет такое странное поведение. Если я подожду и вызову два метода после этого, все в порядке. странный. - person BuddyJoe; 08.09.2009
comment
В этом случае попробуйте инициализировать текстовые поля в событии Windows ContentRendered. Это событие запускается только после того, как все было нарисовано, поэтому, по сути, если проблема заключается в том, что вы думаете, это решит проблему. - person Kyle Rosendo; 09.09.2009