Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.04.2013, 14:03   #1
Predatore
 
Регистрация: 19.07.2009
Сообщений: 6
По умолчанию Фокус-покус!

Доброго времени суток господа!
Простите за каламбур, но у меня фокус выделывает фокусы. В двух словах: на форме есть ряд кнопок, TreeView и TabControl, на вкладках Табконтрола лежат панели, на которые я хочу переводить фокус, когда выбирается соответствующая вкладка. Имена узлов Тривью и вкладок Табконтрола совпадают. Каждой кнопке соответствует определённый узел в дереве и связанная с ним вкладка на Табконтроле. Кнопок много, но т.к. делают они практически одно и тоже, то событие Click у них одно на всех. Дальше будет понятнее на коде:
Код:
private void btnStart_Click(object sender, EventArgs e)
{
    Button btn = sender as Button;
    nodeName = btn.Tag.ToString();
    treeView.SelectedNode = FindNodeByName(nodeName);
    treeView.SelectedNode.Expand();
}

private void treeView_AfterSelect(object sender, TreeViewEventArgs e)
{
    tabControl.SelectTab(e.Node.Name); 
    tabControl.SelectedTab.Controls[0].Focus();
}
Т.е. мы кликаем кнопку, она открывает узел в дереве генерируя тем самым событие AfterSelect у дерева, которое в свою очередь открывает вкладку и переводит фокус на первый элемент на вкладке. До этих пор всё хорошо, но если не кликать кнопку, а напрямую открыть узел в дереве кликнув по нему, то фокус при этом почему-то не переводится. Почему?
Predatore вне форума Ответить с цитированием
Старый 17.05.2013, 23:30   #2
Predatore
 
Регистрация: 19.07.2009
Сообщений: 6
По умолчанию

Проблема всё ещё не решена.
Может у кого-то есть хоть какие-нибудь предположения или догадки?
Ну и вопрос "почему?", конечно интереснее чем, "что делать?", но последний важнее. Может хотя бы посоветуете как выйти из ситуации?
Predatore вне форума Ответить с цитированием
Старый 18.05.2013, 07:57   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
фокус при этом почему-то не переводится.
А то событие вообще срабатывает? Поставь туда точку прерывания.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.05.2013, 17:56   #4
Predatore
 
Регистрация: 19.07.2009
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А то событие вообще срабатывает? Поставь туда точку прерывания.
Событие срабатывает, ставил туда меседжбокс.
Predatore вне форума Ответить с цитированием
Старый 18.05.2013, 18:59   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

В таком случае могу только предположить, что какое-то другое событие после AfterSelect срабатывает в случае клика по дереву, перебирая на себя фокус.
Попробуй поставить месседжбокс в самом конце этого события. Вдруг ты поймаешь момент передачи фокуса вкладке.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 19.05.2013, 22:41   #6
Predatore
 
Регистрация: 19.07.2009
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
В таком случае могу только предположить, что какое-то другое событие после AfterSelect срабатывает в случае клика по дереву, перебирая на себя фокус.
Попробуй поставить месседжбокс в самом конце этого события. Вдруг ты поймаешь момент передачи фокуса вкладке.
Ставил в конце события месседжбокс сообщающий кому сейчас принадлежит фокус, пишет что фокус принадлежит моей панельке. Но на самом деле он остаётся у Тривью, т.к. если на клавиатуре нажать вверх или вниз, выберется верхний или соответственно нижний узел. После такого выбора узла фокус кстати переводится на панель. Какая-то засада именно с кликами по Тривью.

Сейчас обратил внимание, фокус сначала переводится на панель, а потом обратно прыгает на Тривью.

Последний раз редактировалось Predatore; 19.05.2013 в 22:59.
Predatore вне форума Ответить с цитированием
Старый 19.05.2013, 23:21   #7
Predatore
 
Регистрация: 19.07.2009
Сообщений: 6
По умолчанию

Ха! Нашёл на всю голову больное, но рабочее решение...
Может кому пригодится, а может кого и на что-то более вменяемое подтолкнёт. И так. Как я уже говорил, фокус сначала переводится на панель, а потом прыгает обратно на Тривью. Лезем в событие панели Leave (это когда фокус уходит с панели) и в наглую опять возвращаем его на панель. Не понятно правда, как он после этого нормально работает, я имею ввиду что он же по идее теперь вообще с панели уходить не должен, однако же нет, если на что-нить кликнуть, это что-то прекрасно забирает фокус.
Predatore вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Фокус окна Кольша Общие вопросы Delphi 2 12.02.2012 18:52
Фокус окон JS MyXa JavaScript, Ajax 1 13.10.2011 04:01
Фокус ввода Rusl92 JavaScript, Ajax 3 27.07.2011 20:01
Фокус и св-во enabled megachuhancer Общие вопросы Delphi 4 09.09.2009 11:59
Фокус? AlexandrDel Помощь студентам 3 17.12.2006 01:54