Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Почему фокус не уходит!?


Автор: vlsaf 21.5.2008, 11:21
Всем привет.

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


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

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

Как мне передать фокус на контрол "2"?
http://ipicture.ru/

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

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


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

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

Автор: 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 и использую
такую конструкцию
Код

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


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

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

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

Как уйти? Простое myControl2.Focus(), при условии, что  myControl2 находится за пределами 
Табконтрола , не уводит меня с  него.
Не знаю, что делать!!!

Автор: tea_723 21.5.2008, 19:50
Создай 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

Автор: vlsaf 21.5.2008, 23:37
Ловлю прерывание именно так, как ты сказал. Через 
Код
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 

Автор: 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 проходит только:

Код

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

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

    }
}


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

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

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

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

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


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)