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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Почему фокус не уходит!? 
:(
    Опции темы
vlsaf
Дата 21.5.2008, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Всем привет.

Есть сложная форма со сплит контейнерами, Tab контролы, groupBox и т.д.


Когда я нахожусь на контроле "1", то после нажатия на Tab хочу переместиться в контрол "2".
Но не выходит!!! Меня уносит на "а". 

Не пойму, почему smile 

Как мне передать фокус на контрол "2"?
user posted image

вот такой код при перехвате нажатия на клаву
Код

gridLookUpEdit_KundeDaten.Show();
gridLookUpEdit_KundeDaten.Focus();


Как вы уже догадались gridLookUpEdit_KundeDaten это название для контрола "2".

Я уже у Focus() и Show() засовываю. По барабану. 
Они выполняются, но фокус ввода все равно прыгает на "а". smile 

PM   Вверх
Walker
Дата 21.5.2008, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Добрый день!

Работаете с дизайнером студии? Тогда View/Tab Order. Немножко поманипулируете и поймёте принцип.

Удачи!



--------------------
"От вчерашних побед остаётся усталость, если завтрашний день не сулит ничего..."
PM MAIL   Вверх
vlsaf
Дата 21.5.2008, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



2 Walker,

Ну почему так коротко. 
View/Tab Order


tab order, порядок фокусов на фрейме
Уже заигрался. Не помогает. В том то и вопрос, чтобы я не зависел от tab order, 
когда нахожусь в положении "1". Для этого ручками хочу переместить фокус ввода на "2".

View Это, извиняюсь за ламерский вопрос, свойство или методы? Чего?
Куда смотреть?



Это сообщение отредактировал(а) vlsaf - 21.5.2008, 11:55
PM   Вверх
Walker
Дата 21.5.2008, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Tab Order - пункт падающего меню View в Visual Studio. При его выборе. У Вас будет отображаться на контролах порядковый номер перехода фокуса. Меняете его, буквально щёлкая по нему мышкой, добиваетесь нужного порядка.


--------------------
"От вчерашних побед остаётся усталость, если завтрашний день не сулит ничего..."
PM MAIL   Вверх
vlsaf
Дата 21.5.2008, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Это работает при простом расположении контролов.

Если использовать TabControl(ы), то мы застреваем на вкладке Таба.

Вопрос в другом. Почему фокус не перемещается куда надо при выполнении gridLookUpEdit_KundeDaten.Focus(); ???
PM   Вверх
vlsaf
Дата 21.5.2008, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Я разверну вопрос


Всем извеснто, что порядок обхода контролов при нажатии на клавишу Tab 
определнется свойством TabIndex у контрола.

Этот индекс можно задавать или ручками или клацая 
пункт падающего меню View в Visual Studio. При его выборе будет отображаться 
на контролах порядковый номер перехода фокуса. Меняем его, буквально щёлкая 
по нему мышкой, и добиваемся нужного порядка. 

Но не всегда удается переместиться с контрола на контрол.
Если я нахожусь в TabControl. Например TabControl имеет три вкладочки.
Если я нахожусь на последнем элементе упревления первой вкладки, то на вторую 
по табу уже не попадаю. Тогда я перехватываю нажатие на Tab и использую
такую конструкцию
Код

myTabControl.SelectedTab = tabPage2;
myTextEdit.Focus();


Где myTextEdit находится уже на второй вкладке.

Но и это конструкция срабатывает только, если я прыгаю по вкладкам внутри TabControl.

Если я нахожусь на последнем элементе последней вкладки TabControl(а), то при 
нажатии на Tab хочу вообще уйти с TabControl(а) на другой элемент в совсем другом месте.
Но не выходит. TabControl меня не отпускает

Как уйти? Простое myControl2.Focus(), при условии, что  myControl2 находится за пределами 
Табконтрола , не уводит меня с  него.
Не знаю, что делать!!!
PM   Вверх
tea_723
Дата 21.5.2008, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Создай event "контрол "1"_PreviewKeyDown"  и внутрь впиши чего нибудь типа:

Код

private void контрол "1"_PreviewKeyDown(object sender, System.Windows.Forms.PreviewKeyDownEventArgs e)
        {
            if (e.KeyCode == Keys.Tab)
            {
                gridLookUpEdit_KundeDaten.Focus();


            }
        }


Кроме того в свойствах основной формы не забудь выставить KeyPreview = True
Не уверен что 100% нужно, но я бы поставил TabIndex у container для gridLookUpEdit_KundeDaten равным контрол "1".TabIndex +1
PM MAIL   Вверх
vlsaf
Дата 21.5.2008, 23:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ловлю прерывание именно так, как ты сказал. Через 
Код
private void textBox_Toutentext_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
    if (e.KeyCode == Keys.Tab && !e.Shift)
    {
        gridLookUpEdit_KundeDaten.Focus();
        if (gridLookUpEdit_KundeDaten.Focused) MessageBox.Show("Ура!!!");
    }
}


"Ура" появляется, а реально фокус улетает на "a"  smile 

Цитата(tea_723 @  21.5.2008,  19:50 Найти цитируемый пост)
Кроме того в свойствах основной формы не забудь выставить KeyPreview = True


А что это дает. У меня и так PreviewKeyDown отрабатывает.  
Впрочем поставил и ситуация не изменилась.

Индекс у контрола "2" никак не влияет на поведение фокуса.
Хоть 0 хоть 10000 по барабану. 

Руки уже опускаются. Просто не врублюсь, как такое может быть   smile 
PM   Вверх
tea_723
Дата 22.5.2008, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



А event Enter для gridLookUpEdit_KundeDaten срабатывает? Если да, то в этом event посмотри свойство ContainsFocus у TabControl из которого ты приходишь. Можно здесь же попробовать TabControl.SendToBack()

Попробуй переместить "а" из TabControl куда-нибудь влевую часть, что получится?

PM MAIL   Вверх
moucharaby
Дата 23.5.2008, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Дело в том, что для передачи фокуса используется не метод focus(), а метод select().
То есть в данной ситуации надо сделать так:
private void textBox_Toutentext_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
    if (e.KeyCode == Keys.Tab && !e.Shift)
    {
        gridLookUpEdit_KundeDaten.Select();
     }
}

Удачи!
PM MAIL   Вверх
tea_723
Дата 23.5.2008, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Бред какой-то, но для ComboBox проходит только:

Код

{
    if (e.KeyCode == Keys.Tab && !e.Shift)
    {

                ComboBox1.SelectedItem = ComboBox1.Items(номер);
                ComboBox1.SelectAll();

    }
}


Причем просто Select() не идет, можно только Select(start,end). Чтобы фокус переместился обязательно что-то должно быть выделено!
Хотя по идее Focus() должно быть достаточно, CanFocus возвращает true.

PM MAIL   Вверх
vlsaf
Дата 24.5.2008, 10:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(tea_723 @ 22.5.2008,  15:29)
А event Enter для gridLookUpEdit_KundeDaten срабатывает? 
Если да, то в этом event посмотри свойство ContainsFocus у TabControl из которого ты приходишь. 
Можно здесь же попробовать TabControl.SendToBack()

Попробуй переместить "а" из TabControl куда-нибудь влевую часть, что получится?

Событие Enter срабатывает.
Свойство ContainsFocus дает True.
TabControl.SendToBack() не влияет ни на что.

Если я перемещаю "а" в левую часть, то при нажатии таба фокус остается на "1"
=========================================================================
moucharaby Select я пробывал. Не помогает.
Видно, как текст селектируется, но потом селект исчезает и фокус возвращается на "а".


PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




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


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

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