Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Событие LostFocus не срабатывает при нажатии TAB, Почему не срабатывает LosFocus? 
V
    Опции темы
flyerarchi
Дата 19.9.2009, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 27.7.2009

Репутация: нет
Всего: нет



Добрый день!
Столкнулся с такой проблемкой:
на форме размещено очень много текстбоксов,
необходимо, чтобы при переходе от одного текстбокса  к другому менялся
BackColor текстбокса (тот который активен - синий, остальные - белые).

Прописывать смену BackColor для каждого контрола в событиях Enter и Leave - придется писать
для каждого контрола свой код (что не очень хочется)
Код

textBox1.BackColor = .....
 
Хочу заменить этот код на две универсальные функции, которые вызываются при наступлении
событий Enter и Leave, для всех текстбоксов, подписанных на эти события.
Если делать через
 
Код

this.ActiveControl.BackColor = ....

то как менять BackColor для контрола, у которого произошло событие Leave, он ведь больше
не является ActiveControl?

Попробовал действовать не через Enter/Leave, а через GotFocus/LostFocus,
все получилось, т.к. событие LostFocus возникает раньше Leave и код
Код

this.ActiveControl.BackColor = ....

нормально работает.
Но вот беда, все хорошо при переключении между контролами мышью, а вот при переходе
клавишей Tab функция, вызываемая при событие LostFocus работает неправильно.
Почему то текстбокс, потерявший фокус не меняет BackColor.
В чем проблема? 


PM MAIL   Вверх
Heinzz
Дата 19.9.2009, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 12.12.2008
Где: .net

Репутация: 1
Всего: 9



Код

private void textBox1_Leave(object sender, EventArgs e)
        {
            ((TextBox)sender).BackColor = Color.AliceBlue;
        }

        private void textBox1_Enter(object sender, EventArgs e)
        {
            ((TextBox)sender).BackColor = Color.Red;
        }


так все работает smile 
обработчики событий одни на все текстбоксы


--------------------
user posted image
PM MAIL   Вверх
ДобренькийПапаша
Дата 19.9.2009, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 14.1.2006
Где: г.Москва

Репутация: нет
Всего: 7



Выделите все свои текстбоксы зажав клавишу ctrl выберите события и кликнике дважды на соответственно Leave и Enter. Вы получите одну реакцию для всех текстбоксов на соответствующее событие))))


--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
Lunatic2009
Дата 19.9.2009, 22:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 1.7.2009

Репутация: нет
Всего: 3



Можно сделать что-то типа этого:

Код

        private void Form1_Load(object sender, EventArgs e)
        {
            InitializeTextBoxes(Controls);
        }

        private void InitializeTextBoxes(Control.ControlCollection controls)
        {
            foreach (Control control in controls)
            {
                if (control.Controls.Count != 0)
                {
                    InitializeTextBoxes(control.Controls);
                }
                else
                {
                    if (control is TextBox)
                    {
                        control.GotFocus += TextBoxes_GotFocus;
                        control.LostFocus += TextBoxes_LostFocus;
                    }
                }
            }
        }

        private void TextBoxes_GotFocus(object sender, EventArgs e)
        {
            ((TextBox)sender).BackColor = Color.Blue;
        }

        private void TextBoxes_LostFocus(object sender, EventArgs e)
        {
            ((TextBox)sender).BackColor = Color.White;
        }

PM   Вверх
flyerarchi
Дата 20.9.2009, 20:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 27.7.2009

Репутация: нет
Всего: нет



Как всегда, все гениальное - просто! smile)))
Спасибо!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.0465 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.