فقدت السيطرة الحدث التركيز عند استخدام اختصار لوحة المفاتيح

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

  •  08-07-2019
  •  | 
  •  

سؤال

لكلا. NET WinForms عناصر ونوافذ العرض مؤسسة، إذا كان لدي مربع النص الذي قام المستخدم بإدخال النص فقط في وزر واحدة، إذا قام المستخدم بالنقر فوق الزر "LostFocus" وقع الحدث قبل وقع الحدث انقر على زر . ولكن إذا كان المستخدم يستخدم اختصار لوحة المفاتيح لزر (نص مثل زر هو "و زر" أو "_Button" والمستخدم يؤدي البديل + B)، ثم "LostFocus" وقع الحدث بعد الحدث نقرة زر، والتي هي أقل فائدة.

هل تعرف من الحلول المعقولة؟ لدينا مختلف الأشياء التي نريد أن تحدث في LostFocus قبل ButtonClick.

هل كانت مفيدة؟

المحلول

هل يمكن أن تحاول تتبع أم لا منطق فقدان التركيز وحدث قبل اطلاق النار من المنطق زر. يجب أن لا يكون حقا رمز مباشرة في معالج على أي حال. هل يمكن أن تفعل شيئا من هذا القبيل:

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

نصائح أخرى

وماذا سيحدث لو فعلت هذا قبل كل شيء في معالج زر؟ (أو ربما فئة فرعية زر وتجاوز عند_النقر لتطبيق هذا المنطق "في جميع أنحاء العالم").

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

هل أن يسحبوا القضية؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top