2012-03-22 3 views
0

Есть кнопка и текстовое поле. Я добавил событие «KeyDown» в текстовое поле, чтобы при нажатии кнопки «Enter» нажата кнопка. Хорошо, тогда я попытался снова сфокусироваться на текстовом поле, но не смог. В приведенном ниже коде я пробовал три способа, но ни один из них не работает.Установить фокус на элемент

private void txt_addRemove_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.Key == Key.Return) 
    {    
     btn_BC_add.RaiseEvent(new RoutedEventArgs(Button.ClickEvent)); 

     // 1.way 
     // IInputElement focusedElement = FocusManager.GetFocusedElement(txt_addRemove); 
     // 2.way 
     // Keyboard.Focus(txt_addRemove); 
     // 3.way 
     // txt_addRemove.Focus(); 
    } 
} 
+0

Вместо того, чтобы ловить ключ возврата, я бы просто установить [IsDefault свойство] (http://msdn.microsoft. ru/en-us/library/system.windows.controls.button.isdefault.aspx) кнопки. – Heinzi

ответ

1

Добавить это

if (!textBox1.Focus()) 
    { 
     textBox1.Focus(); 
    } 

Что это делает: 1. Мы проверяем, если текстовое поле не сфокусирован. 2. Если он не сфокусирован, сфокусируйте управление.

EDIT: Как об этом:

btn_BC_add.PerformClick() 
+0

Зачем это работать, если «3.way» в его вопросе не работает? – Heinzi

+0

@ Darkshadw: Не работает. – Shibli

+1

Потому что C# может думать, что он уже сфокусирован. –

0

Попробуйте сфокусировать текстовое поле после того, как обработчик событий завершения работы с:

Dispatcher.Invoke(() => { txt_addRemove.Focus(); }) 
0

не смогло вы также попытаться изменить фокус от обработчика событий кнопки? это может быть нежелательно, если вы не хотите, чтобы фокус находился в вашем текстовом поле после обычного нажатия кнопки, но он должен работать.

Im догадываясь, что ваш щелчок кнопки генерирует запись назад, прежде чем фокус может быть изменен

Смежные вопросы