Pergunta

Para ambos WinForms e Windows Presentation Foundation, se eu tenho uma caixa de texto que o usuário acaba de entrar texto e um botão, se o usuário clica no botão "LostFocus" evento é acionado antes de o evento é acionado o botão de clique . No entanto, se o usuário utiliza um atalho de teclado para o botão (texto de exemplo Button é "& botão" ou "_Button" e executa usuário Alt + B), então o "LostFocus" evento é acionado após o evento clique de botão, que é menos útil.

Você sabe de soluções alternativas razoáveis? Nós temos várias coisas que queremos ocorrer em LostFocus antes ButtonClick.

Foi útil?

Solução

Você poderia tentar rastrear ou não a lógica foco perdido ocorreu antes de disparar a lógica botão. Você realmente não deve ter o código diretamente no manipulador de qualquer maneira. Você poderia fazer algo parecido com isto:

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 */
        }
    }

Outras dicas

O que aconteceria se você fez isso em primeiro lugar no manipulador de botão? (Ou talvez subclasse o botão e substituir OnClick para aplicar essa lógica "em todo o mundo").

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

Oxalá contornar o problema?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top