ما الفرق بين التحكم.حدد() والتحكم.التركيز()?
-
03-07-2019 - |
سؤال
في WinForms إلى تعيين التركيز إلى عنصر تحكم محدد يبدو لي دائما أن تصل الرياح الدعوة Control.Select()
و Control.Focus()
إلى الحصول على عمل.
ما هو الفرق ، وهذا هو النهج الصحيح ؟
المحلول
التركيز هو على مستوى منخفض طريقة تهدف في المقام الأول من أجل التحكم المخصصة الكتاب.بدلا من تطبيق المبرمجين يجب استخدام تحديد الأسلوب أو ActiveControl الطفل الضوابط ، أو تفعيل طريقة أشكال.
http://msdn.microsoft.com/en-us/library/system.windows.forms.control.focus.aspx
نصائح أخرى
التركيز() هو وظيفة على مستوى منخفض في الواقع مجموعات التركيز.
حدد() هو العالي على مستوى الأسلوب.يبدو للوهلة الأولى تكرارا التصاعدي في السيطرة على الأم الهرمي حتى يجدها مراقبة الحاويات.ثم مجموعات من أن الحاوية ActiveControl (دعا التحكم).المنطق في هذه الأساليب ليست واضحة ومع ذلك ، هناك معالجة خاصة على UserControl الحاويات.
للحصول على مثال عن كيفية فهي مختلفة, إذا كنت تحاول وضع التحكم في أشكال التطبيق الافتراضي التركيز عند فتحه, فقط حدد() ستعمل عندما دعا في منشئ بعد InitializeComponent().التركيز() لا.
فقط أن أضيف إلى هذا الموضوع وجدت أن عند كتابة المستخدم التحكم التي انتقلت عناصر التحكم الأخرى من شكل إلى آخر (تم إنشاؤه حديثا شكل).النموذج الأصلي لم يعد حدد عنصر التحكم ولكن باستخدام التركيز سمح لها أن تفعل ذلك.أعتقد أن هذا يؤكد على إجابات حول مستويات هذه أساليب العمل.ولكن هذا يعني أيضا أنها ليست بسيطة يكفي أن أقول استخدام حدد في أعلى مستوى منذ اختيار لم يعد يعمل كما هو متوقع على شكل الاصلي (غير أنه ينبغي أن يتم وضعها في شكل مختلف - أنا أقبل ذلك)
التركيز(), في بعض الحالات, يمكن أن يسبب نافذة امتلاك التحكم للحصول على التركيز إذا لم يكن لديك التركيز.حدد() لا يسبب التركيز الاستيلاء على جانب النافذة.
من تجربة شخصية كتبت المستخدم التحكم وراثة ويندوز تحرير وسرد.اضطررت إلى كتابة التعليمات البرمجية إلى تجاوز OnEnter
الحدث كان بيانا هناك يقول
If Me.Focused Then ... Else ...
ولكن للأسف عادت إلى نتيجة غير متوقعة.إذا اتصلت MyCustomerComboControl.Select
(إما في الحمل ، كما هو موضح أو تفعيلها من الأحداث) فمن دعا OnEnter
طريقة لكنه فشل في التسجيل كان التركيز (أيركز كانت كاذبة) ولكن إذا دعوت التركيز عملت.وعلاوة على ذلك Select
عمل إذا كان النموذج مفتوحا أيإذا اخترت عنصر تحكم آخر ثم إعادة اختيار الأصلية التحكم في كل شيء كان على ما يرام.وذلك في أي ظروف أخرى غير السيناريو ، استخدام Select
لأنه يقول ذلك أعلاه.