controlla l'evento di messa a fuoco persa quando si utilizza la scorciatoia da tastiera

StackOverflow https://stackoverflow.com/questions/290590

  •  08-07-2019
  •  | 
  •  

Domanda

Sia per .NET Winforms che per Windows Presentation Foundation, se ho una casella di testo in cui l'utente ha appena inserito il testo e un pulsante, se l'utente fa clic sul pulsante " LostFocus " l'evento viene generato prima che il pulsante venga attivato. Tuttavia, se l'utente utilizza una scorciatoia da tastiera per il pulsante (ad es. Il testo del pulsante è " & amp; Pulsante " oppure " _Button " e l'utente esegue Alt + B), quindi il pulsante "LostFocus" L'evento viene generato dopo l'evento del clic sul pulsante, che è meno utile.

Conosci soluzioni alternative ragionevoli? Abbiamo varie cose che vogliamo che si verifichino in LostFocus prima di ButtonClick.

È stato utile?

Soluzione

Potresti provare a tracciare se si è verificata o meno la logica di messa a fuoco persa prima di attivare la logica del pulsante. Non dovresti comunque avere il codice direttamente nel gestore. Potresti fare qualcosa del genere:

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

Altri suggerimenti

Cosa succederebbe se lo facessi prima nel gestore dei pulsanti? (o forse sottoclasse il pulsante e sovrascrivi OnClick per applicare questa logica "in tutto il mondo").

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

Potrebbe risolvere il problema?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top