1

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

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

4

2 に答える 2

3

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

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 */
        }
    }
于 2008-11-14T18:20:23.660 に答える
1

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

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

それは問題を回避しますか?

于 2008-11-14T16:31:34.330 に答える