سؤال

أنا أعاني بدلا من الحيرة مشكلة مع مفتاح الهروب معالج على مربع حوار في Borland C++ Builder 5.هل هناك أي متطلبات أخرى على مفتاح الهروب إلى النار إلغاء الحدث (من المدرجة أدناه)?

  1. زر "إلغاء" (أ TBitBtn) له بإلغاء الملكية تعيين إلى true.
  2. زر "إلغاء" لديه الخاصية الافتراضية تعيين إلى false.
  3. زر "إلغاء" لها modalResult تعيين mrCancel.

ملاحظة:أنا أعمل مع القديم تراث التطبيق الذي لا يزال يجري تجميعها في Borland C++ Builder 5.لدينا مشروع منفصل ليحل محله - أنا فقط أقوم الغاية من صيانة الحياة.

التحديث

بعد أربعة أشهر لقد توقفت أخيرا الخدش رأسي اتضح أن الأصل شكل كان التطبيق وقت التشغيل OnShortCut معالج محددة.أنا فقط بحاجة إلى تعطيل هذا Esc معالج للعمل على الطفل الحوار.

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

المحلول

يجب عليك التحقق من جميع السبل الممكنة إلغاء الحدث يمكن أن يكون قد تم حظره:

  1. أولا التحقق إذا كان النقر فوق الزر إلغاء الأمر في الواقع إغلاق النموذج.

  2. ثم تحقق مما إذا كان أي زر له بإلغاء الملكية تعيين إلى true.

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

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

  5. أيضا التحقق من ما إذا كان هناك أي hooks لوحة المفاتيح النشط.

نصائح أخرى

قد يكون هذا النموذج الخاصية KeyPreview تم تعيين إلى true.هذا هو المكان مفتاح الهروب غالبا ما/من المحتمل أن يكون تم تعطيل.إن الخاصية KeyPreview هو أيضا في كثير من الأحيان تمكين لالتقاط [عودة] اضغط على مفتاح (أولا-هاء.OnKeyPress) للانتقال إلى الحقل التالي بدلا من إغلاق النموذج.

يمكنك أيضا إنشاء آخر مربع الحوار إضافة زر إلغاء الأمر في ذلك ومعرفة ما إذا كان مفتاح الهروب يعمل.ثم قارن بين سوق دبي المالي مصدر كل أشكال التحقق من الاختلافات في الإعدادات.

هل هناك "CanClose" نوع الحدث مع المنطق ومنعه من الإغلاق ؟

كما نضع في اعتبارنا أن الحوار يحتاج إلى الاحتجاج عبر ShowModal() بدلا من مجرد عرض().على سبيل المثال ، إذا كان النموذج الخاص بك يسمى "FAskDialog" ثم رمز يعرض ينبغي أن يكون مثل

FAskDialog->ShowModal();

بدلا من

FAskDialog->Show();

إذا كان الحوار هو الاحتجاج عبر عرض () ، ثم ضرب مفتاح إلغاء أو تحديد ModalResult = mrCancel لا يؤدي الحوار إلى وثيقة.

هذا هو السؤال القديم ، أستطيع أن أعطي إجابة:

تحتاج إلى تعيين KeyPreview = True ثم كتابة رمز إلى فخ المفتاح ESC:

Form1::OnKeyUp(...)
{
if (Key == 27) {
Close();
}
}

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