كيفية معرفة أحداث المستخدم من الأحداث الاصطناعية؟

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

سؤال

ولدي محرر JFace التي تتألف في معظمها تتكون من TreeViewer. يتم التوصيل هذا الأمر إلى ContentOutlinePage لتقديم عرض المخطط التفصيلي في الحياة.

وعندما يتلقى إما واحد SelectionChangedEvent يسمونه الآخرين setSelection() طريقة ... وهنا تكمن المشكلة. setSelection() يولد SelectionChangedEvent آخر ... وهكذا منضما حلقة لا نهائية.

هل هناك وسيلة لإخبار إذا تم إنشاء SelectionChangedEvent بواسطة تفاعل المستخدم الفعلي بدلا من وجوه الدعوة setSelection() آخر؟

هل هناك وسيلة أفضل لا يزال لوقف هذا النوع من القاتل، تبني؟

ورحبت أدلة.

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

المحلول

وعموما، هل تحقق العلم في بداية الروتين لتحقق لمعرفة ما إذا كنت في منتصف معالج الحدث. إذا تم تعيين العلم، فإنك الخروج دون معالجة.

إذا لم يتم تعيين العلم، وقمت بتعيين العلم، عملية، ثم تعيين إشارة إلى الخلف.

نصائح أخرى

ونمط آخر أن يعمل هو إزالة المستمع الحدث، وجعل الاختيار، إضافة eventlistener مرة أخرى. وهذا يضمن أن هناك مكان واحد في التعليمات البرمجية حيث لديك ما يدعو للقلق حول هذا - مع العلم عملتم للحفاظ على وقت واحد مكانين

وأيضا، SelectionChangedChanged هو ربما (لست متأكدا على الرغم من) وضعت على قمة كومة الحدث (أي بشكل غير متزامن). في هذه الحالة، يمكنك أيضا تقليل الفترة التي المشاهد لا نشر الإشعار.

وعموما، أجد أنه من المخيب للآمال أن SelectionChangedEvent ولدت هو نفسه، بغض النظر عن ما إذا تم النقر على فأرة الحاسوب. أعتقد أنه ليس من السهل أن يقوموا بذلك كما هو الأمل. كان لي مرة واحدة لتعديل سلوك الطبقة محرر النص بحيث جديدة حول نوعين من الأحداث إدراج (إنشاء المستخدم ولدت شبكة) من أجل جعل تلك الفئة محرر النصوص المشتركة. أنا أحب أن أرى مزيد من النقاش حول هذا الأمر.

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