contrôler les événements de focus perdus lors de l'utilisation d'un raccourci clavier

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

  •  08-07-2019
  •  | 
  •  

Question

Pour .NET Winforms et Windows Presentation Foundation, si j'ai une zone de texte dans laquelle l'utilisateur vient de saisir du texte et un bouton, s'il clique sur le bouton "LostFocus". L'événement se déclenche avant le clic du bouton. Toutefois, si l'utilisateur utilise un raccourci clavier pour le bouton (par exemple, le texte du bouton est "& amp; Button" ou "_Button" et l'utilisateur exécute Alt + B), alors le champ "LostFocus" événement se déclenche après l'événement clic du bouton, ce qui est moins utile.

Connaissez-vous des solutions de contournement raisonnables? Nous avons plusieurs choses que nous souhaitons voir dans LostFocus avant ButtonClick.

Était-ce utile?

La solution

Vous pouvez essayer de déterminer si la logique de focus a été perdue avant de déclencher la logique de bouton. De toute façon, vous ne devriez pas avoir de code directement dans le gestionnaire. Vous pouvez faire quelque chose comme ça:

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

Autres conseils

Que se passerait-il si vous le faisiez d'abord dans le gestionnaire de boutons? (ou peut-être sous-classez le bouton et remplacez OnClick pour appliquer cette logique "mondiale").

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

Cela contournerait-il le problème?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top