2008-11-14 4 views
1

Для обеих .NET Winforms и Windows Presentation Foundation, если у меня есть текстовое поле, в которое пользователь только что ввел текст, и кнопку, если пользователь нажимает кнопку «LostFocus», событие срабатывает до срабатывания кнопки click event. Однако, если пользователь использует комбинацию клавиш для кнопки (например, текст кнопки «& Button» или «_Button», а пользователь выполняет Alt + B), то событие «LostFocus» запускается после события нажатия кнопки, что менее полезно.управление потерянное фокусное событие при использовании сочетания клавиш

Вы знаете разумные обходные пути? У нас есть разные вещи, которые мы хотим встретить в LostFocus до ButtonClick.

ответ

3

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

public partial class Form1 : Form 
    { 
     private Boolean _didLostFocusLogic; 

     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void textBox1_Leave(object sender, EventArgs e) 
     { 
      LostFocusLogic(); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      ButtonClickLogic(); 
     } 

     private void LostFocusLogic() 
     { 
      /* Do stuff */ 
      _didLostFocusLogic = true; 
     } 

     private void ButtonClickLogic() 
     { 
      if (!_didLostFocusLogic) 
       LostFocusLogic(); 

      _didLostFocusLogic = false; // Reset for next time. 

      /* Do stuff */ 
     } 
    } 
1

Что произойдет, если вы сделали это в первую очередь в обработчике кнопок? (или, возможно, подкласс кнопки и переопределить OnClick, чтобы применить эту логику «по всему миру»).

Button b = (Button) sender; 
b.Focus(); 

Будет ли это охватывать проблему?