| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .NET и C# > Почему фокус не уходит!? |
| Автор: vlsaf 21.5.2008, 11:21 | ||
| Всем привет. Есть сложная форма со сплит контейнерами, Tab контролы, groupBox и т.д. Когда я нахожусь на контроле "1", то после нажатия на Tab хочу переместиться в контрол "2". Но не выходит!!! Меня уносит на "а". Не пойму, почему Как мне передать фокус на контрол "2"? http://ipicture.ru/ вот такой код при перехвате нажатия на клаву
Как вы уже догадались gridLookUpEdit_KundeDaten это название для контрола "2". Я уже у Focus() и Show() засовываю. По барабану. Они выполняются, но фокус ввода все равно прыгает на "а". |
| Автор: Walker 21.5.2008, 11:32 |
| Добрый день! Работаете с дизайнером студии? Тогда View/Tab Order. Немножко поманипулируете и поймёте принцип. Удачи! |
| Автор: vlsaf 21.5.2008, 11:49 |
| 2 Walker, Ну почему так коротко. View/Tab Order. tab order, порядок фокусов на фрейме Уже заигрался. Не помогает. В том то и вопрос, чтобы я не зависел от tab order, когда нахожусь в положении "1". Для этого ручками хочу переместить фокус ввода на "2". View Это, извиняюсь за ламерский вопрос, свойство или методы? Чего? Куда смотреть? |
| Автор: Walker 21.5.2008, 11:54 |
| Tab Order - пункт падающего меню View в Visual Studio. При его выборе. У Вас будет отображаться на контролах порядковый номер перехода фокуса. Меняете его, буквально щёлкая по нему мышкой, добиваетесь нужного порядка. |
| Автор: vlsaf 21.5.2008, 11:59 |
| Это работает при простом расположении контролов. Если использовать TabControl(ы), то мы застреваем на вкладке Таба. Вопрос в другом. Почему фокус не перемещается куда надо при выполнении gridLookUpEdit_KundeDaten.Focus(); ??? |
| Автор: vlsaf 21.5.2008, 12:29 | ||
| Я разверну вопрос Всем извеснто, что порядок обхода контролов при нажатии на клавишу Tab определнется свойством TabIndex у контрола. Этот индекс можно задавать или ручками или клацая пункт падающего меню View в Visual Studio. При его выборе будет отображаться на контролах порядковый номер перехода фокуса. Меняем его, буквально щёлкая по нему мышкой, и добиваемся нужного порядка. Но не всегда удается переместиться с контрола на контрол. Если я нахожусь в TabControl. Например TabControl имеет три вкладочки. Если я нахожусь на последнем элементе упревления первой вкладки, то на вторую по табу уже не попадаю. Тогда я перехватываю нажатие на Tab и использую такую конструкцию
Где myTextEdit находится уже на второй вкладке. Но и это конструкция срабатывает только, если я прыгаю по вкладкам внутри TabControl. Если я нахожусь на последнем элементе последней вкладки TabControl(а), то при нажатии на Tab хочу вообще уйти с TabControl(а) на другой элемент в совсем другом месте. Но не выходит. TabControl меня не отпускает Как уйти? Простое myControl2.Focus(), при условии, что myControl2 находится за пределами Табконтрола , не уводит меня с него. Не знаю, что делать!!! |
| Автор: tea_723 21.5.2008, 19:50 | ||
Создай event "контрол "1"_PreviewKeyDown" и внутрь впиши чего нибудь типа:
Кроме того в свойствах основной формы не забудь выставить KeyPreview = True Не уверен что 100% нужно, но я бы поставил TabIndex у container для gridLookUpEdit_KundeDaten равным контрол "1".TabIndex +1 |
| Автор: tea_723 22.5.2008, 15:29 |
| А event Enter для gridLookUpEdit_KundeDaten срабатывает? Если да, то в этом event посмотри свойство ContainsFocus у TabControl из которого ты приходишь. Можно здесь же попробовать TabControl.SendToBack() Попробуй переместить "а" из TabControl куда-нибудь влевую часть, что получится? |
| Автор: moucharaby 23.5.2008, 14:23 |
| Дело в том, что для передачи фокуса используется не метод focus(), а метод select(). То есть в данной ситуации надо сделать так: private void textBox_Toutentext_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) { if (e.KeyCode == Keys.Tab && !e.Shift) { gridLookUpEdit_KundeDaten.Select(); } } Удачи! |
| Автор: tea_723 23.5.2008, 17:45 | ||
Бред какой-то, но для ComboBox проходит только:
Причем просто Select() не идет, можно только Select(start,end). Чтобы фокус переместился обязательно что-то должно быть выделено! Хотя по идее Focus() должно быть достаточно, CanFocus возвращает true. |
| Автор: vlsaf 24.5.2008, 10:08 | ||
Событие Enter срабатывает. Свойство ContainsFocus дает True. TabControl.SendToBack() не влияет ни на что. Если я перемещаю "а" в левую часть, то при нажатии таба фокус остается на "1" ========================================================================= 2 moucharaby Select я пробывал. Не помогает. Видно, как текст селектируется, но потом селект исчезает и фокус возвращается на "а". |