Pregunta

Tanto para .NET Winforms como para Windows Presentation Foundation, si tengo un cuadro de texto en el que el usuario acaba de ingresar texto, y un botón, si el usuario hace clic en el botón "LostFocus". el evento se dispara antes de que el botón haga clic en el evento se dispara. Sin embargo, si el usuario usa un método abreviado de teclado para el botón (por ejemplo, el texto del Botón es & amp; Botón & amp; " _Button " y el usuario realiza Alt + B), entonces el " LostFocus " el evento se dispara después del evento de clic del botón, lo que es menos útil.

¿Conoces soluciones alternativas razonables? Tenemos varias cosas que queremos que ocurran en LostFocus antes de ButtonClick.

¿Fue útil?

Solución

Puede intentar rastrear si se ha producido o no la lógica de foco perdido antes de activar la lógica del botón. De todos modos, no debería tener el código directamente en el controlador. Podrías hacer algo como esto:

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

Otros consejos

¿Qué pasaría si primero hicieras esto en el controlador de botones? (o quizás subclase el botón y anule OnClick para aplicar esta lógica en todo el mundo).

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

¿Eso solucionaría el problema?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top