Я использую событие Enter в текстовом поле для управления своим заполнителем, но событие Enter срабатывает, когда моя форма отображается без действий пользователя.
Как я могу это исправить?
Form loginWindow = new Form();
loginWindow.Show();
private void IdTextBox_Enter(object sender, EventArgs e)
{
if (IdTextBox.Text == "Identifiant")
{
IdTextBox.Text = "";
IdTextBox.ForeColor = Color.Black;
}
}
да, это мой первый TextBox в форме, второй работает хорошо, и его событие Enter не сработало
Событие ввода срабатывает, когда элемент управления получает фокус - когда ваша форма запускает первый элемент управления (ваше текстовое поле), получает фокус - поэтому событие срабатывает должным образом.
Итак, почему IdTextBox.ContainsFocus = false, и я не могу писать в текстовое поле?
Не видя остального кода формы - сложно сказать. Чего именно вы пытаетесь достичь.
Как говорит @PaulF. Вы можете объяснить, в чем проблема, если вы вводите этот обработчик событий? Проверка if заблокирует любой побочный эффект, и обработчик событий станет безвредным.
Это просто способ иметь заполнитель в моем текстовом поле. При вводе стирать текст, когда я выхожу, если пусто, напишите мой заполнитель. Больше нет кода для отображения или, возможно, события выхода, но оно противоположно событию Enter.
См. stackoverflow.com/a/5450496/939213 для текста-заполнителя.
Я создал небольшую тестовую форму с двумя текстовыми полями - при отображении формы все работает правильно - «Идентификатор» очищен, и я могу писать в текстовое поле. Поэтому я не могу понять, почему вы не можете вводить текст в текстовое поле. Причина, по которой ContainsFocus имеет значение false, заключается в том, что в этот момент элемент управления не полностью получил фокус - это происходит только при срабатывании события GotFocus - см. Ответ Баскара Джона.
Хо, хорошо, мой плохой @PaulF .. Я могу писать в текстовом поле, но мой заполнитель стирается из-за события Enter, поэтому мое текстовое поле пустое, а не заполнитель
Если вы хотите, чтобы текст-заполнитель оставался до тех пор, пока текст не будет введен в поле (и появится снова, если весь текст будет удален), посмотрите ссылку, опубликованную ispiro. Вам не нужно создавать производный класс - вы можете просто вызвать метод SendMessage с "IdTextBox.Handle" в качестве первого параметра.
Установите TabStop = false
. Фокус не переместится в TextBox.
спасибо @Jimi, он отлично работает.
Обратите внимание, что ваши пользователи не смогут переходить к этому элементу управления Tab - он будет доступен только щелчком мыши. Если проблема возникает только при первом запуске формы, вы можете сбросить TabStop на true в событии Enter.
спасибо за это разъяснение @PaulF
Ваш TextBox является первым в порядке TabIndex?