controlla l'evento di messa a fuoco persa quando si utilizza la scorciatoia da tastiera
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.
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?