キーボードショートカットを使用するときにフォーカスイベントを失います

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

  •  08-07-2019
  •  | 
  •  

質問

.NET WinformsとWindows Presentation Foundationの両方で、ユーザーがテキストを入力したばかりのテキストボックスとボタンがある場合、ユーザーがボタンをクリックすると、「LostFocus」がボタンクリックイベントが発生する前にイベントが発生します。ただし、ユーザーがボタンにキーボードショートカットを使用する場合(たとえば、ボタンのテキストが「& Button」または「_Button」で、Alt + Bを実行する場合)、「LostFocus」はイベントはボタンクリックイベントの後に発生しますが、あまり有用ではありません。

合理的な回避策を知っていますか? ButtonClickの前にLostFocusで発生させたいさまざまなことがあります。

役に立ちましたか?

解決

ボタンロジックを起動する前に、フォーカスロジックが失われたかどうかを追跡できます。とにかく、ハンドラーに直接コードを入れるべきではありません。次のようなことができます:

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

他のヒント

ボタンハンドラーで最初にこれを実行するとどうなりますか? (または、ボタンをサブクラス化し、OnClickをオーバーライドしてこのロジックを「ワールドワイド」に適用します)。

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

これで問題は解決しますか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top