سؤال

عند تشغيل تطبيق MFC قديم في مصحح أخطاء Visual Studio، رأيت الكثير من التحذيرات في نافذة الإخراج مثل ما يلي:

تحذير:تخطي زر غير الاختيار في المجموعة.

أدرك أنك في MFC تضع أزرار الاختيار في مجموعات للإشارة إلى مجموعات أزرار الاختيار التي يتم دمجها معًا.إذا كنت أتذكر بشكل صحيح، يمكنك القيام بذلك عن طريق تعيين خاصية "المجموعة" لزر الاختيار الأول على "صحيح"، ثم قم بتعيين خاصية "مجموعة" بقية أزرار الاختيار على "خطأ".

لدي ثلاثة أسئلة حول هذا التحذير.

  1. كيف تتخلص من هذا التحذير؟هل يجب عليك تعيين خاصية "المجموعة" لجميع عناصر التحكم في زر غير Radio إلى True لتجنب ذلك ، أو هل يجب عليك فقط تعيينها للتحكم الأول بعد زر الراديو الأخير؟

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

  3. ما هو السلوك السلبي الذي يمكن أن يحدث إذا لم تقم بإصلاح هذا التحذير؟بمعنى آخر ، هل هذا مهم؟

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

المحلول

يعني التحذير أن هناك بعض التحكم بخلاف زر الاختيار في ترتيب علامات التبويب بين زري الاختيار الأول والأخير في المجموعة.السيطرة مع WS_GROUP تمثل مجموعة الأنماط بداية المجموعة.

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

أعتقد أنه يمكنك تجاهل هذا التحذير بأمان، بشرط أن تعمل مجموعة أزرار الاختيار بشكل صحيح.

نصائح أخرى

بين الردود هنا وبعض الأبحاث في المنتديات القديمة، أعتقد أنني اكتشفت على الأقل كيفية حل مشكلاتي.إليك ما اكتشفته لأسئلتي أعلاه.

  1. اقترح ChrisN وSmashery أن أقوم بإعادة ترتيب علامات التبويب للتأكد من ترتيب أزرار الاختيار بشكل تسلسلي، وقد أدى هذا إلى إصلاح بعض التحذيرات.

    بالإضافة إلى ذلك، يجب أن يحتوي عنصر التحكم الأول في ترتيب علامات التبويب بعد مجموعة أزرار الاختيار على مجموعة خاصية WS_GROUP (أو خاصية المجموعة مضبوطة على true في المحرر).يُخبر هذا MFC بأن مجموعة أزرار الاختيار قد انتهت.بدونها، ستنشئ جميع عناصر التحكم المتبقية بترتيب علامات التبويب حتى تقوم WS_GROUP التالية بإنشاء التحذير.بعد القيام بكلا الأمرين، اختفت التحذيرات الموجودة في مربعات الحوار هذه.

  2. لا يزال هذا سؤالًا مفتوحًا، ولم أجد طريقة جيدة لتحديد هذه المشكلات دون فتح كل مربع حوار وانتظار التحذيرات.

    إذا كنت تعلم أن أحد مربعات الحوار يقوم بإنشاء هذا التحذير ولكنك لا تعرف عنصر التحكم الذي يسبب ذلك، فيمكنك تعيين نقطة توقف في الدالة DDX_Radio() على استدعاء TRACE() الذي يقوم بإنشاء التحذير.يمكن أن يسهل ذلك تحديد عنصر التحكم المحدد الذي يتم الشكوى منه.

  3. أتفق مع ChrisN، ولا يمكنني التفكير في أي سبب لهذا التحذير بخلاف جعلك تتحقق مرة أخرى من ترتيب علامة التبويب الخاصة بك.لا يمكنني العثور في أي مكان آخر عبر الإنترنت على أي إشارة أخرى إلى المشكلة التي قد يسببها هذا.

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

بالنسبة للنقطة 2، ولهذا السبب أعتقد أنك تبقي هذا السؤال دون إجابة، لا أستطيع تصور أي شيء أبسط من إجراء بحث نصي (*.rc) لجميع مربعات الحوار باستخدام أزرار الاختيار.بالنسبة لكل نتيجة، قم بفحص رمز المورد لهذه المشكلة بشكل مرئي وقم بتصحيحه.سأفعل ذلك يدويًا في مصدر ملف المورد مقابل مصدره.تحاول اللعب مع مصمم واجهة المستخدم الرسومية.

مقابل ما يستحق، كان لدي 3 أزرار اختيار بترتيب علامات التبويب الصحيح (تم تأكيدها في ملف .rc دون أي مشاكل بعد ذلك) وما زلت أتلقى تحذيرًا.أظهرت نقطة التوقف في DDX_Radio أنه تم الإبلاغ عن زري الاختيار الثاني والثالث على أنهما غير راديو!بحثت في Resources.h واكتشفت زر الاختيار الأول باستخدام المعرف 1313 واثنين آخرين باستخدام 1311 و1312.ضعها في ترتيب علامات التبويب المرغوب فيه وأعد ترقيم المعرفات لتناسبها وتم حل المشكلة.أعتقد أن GetWindow GW_HWNDNEXT مرتبط بطريقة ما بترتيب المعرف وليس بترتيب علامة التبويب، على الرغم من عمل مجموعة الراديو.ملحوظة:لا تزال تستخدم Visual C++ v6

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