نصائح

تعيين CheckBox.Checked بدون حدث OnClick

تعيين CheckBox.Checked بدون حدث OnClick

يعرض عنصر التحكم TCheckBox Delphi مربعًا يمكن تشغيله (تحديده) أو إيقاف تشغيله (لم يتم تحديده). ال فحص الممتلكات يحدد ما إذا كانت خانة الاختيار محددة أم لا.

عندما ينقر المستخدم فوق مربع الاختيار لتغيير حالته المحددة ، يتم تشغيل حدث OnClick الخاص بمربع الاختيار.

تغيير خاصية التحقق في خانة الاختيار

لأنه لا يوجد OnCheckedChanged الحدث ، من المحتمل أن تتعامل مع منطق البرنامج الذي يعتمد على الحالة المحددة لمربع الاختيار في حدث OnClick الخاص به.

ومع ذلك ، إذا كنت تغيير الخاصية المحددة برمجياً ، سيتم تشغيل حدث OnClick - على الرغم من عدم تفاعل المستخدم.

هناك (على الأقل) طريقتان لتغيير الخاصية المحددة لمربع الاختيار برمجياً أثناء "تعطيل" حدث OnClick.

أزل OnClick Handler ، و Change Checked ، وأعد معالج OnClick الأصلي

في Delphi for Win32 ، يمكن أن يحتوي الحدث على معالج حدث واحد (إجراء) مرفق به (على الرغم من وجود طريقة لمحاكاة أحداث البث المتعدد في Delphi لـ Win32). توقيع حدث OnClick لعنصر تحكم TCheckBox هو "نوع TNotifyEvent = إجراء (المرسل: TObject) من الكائن ؛"

إذا قمت بتعيين NIL لحدث OnClick قبل تغيير حالة مربع الاختيار ، فعد إلى إجراء معالجة حدث OnClick الأصلي - لن يتم إطلاق حدث OnClick.

إجراء SetCheckedState (CONST checkBox: TCheckBox؛ CONST تحقق: منطقية) ؛

فار

onClickHandler: TNotifyEvent؛

ابدأ

  مع مربع فعل

  ابدأ

onClickHandler: = OnClick؛

OnClick: = صفر;
تم الفحص: = تحقق ؛
OnClick: = onClickHandler؛
  

النهاية;

النهاية;

استخدام هذا الإجراء بسيط:

 // تبديل حالة التحققابدأ

SetCheckedState (CheckBox1 ، وليس CheckBox1.Checked) ؛

النهاية;

SetCheckedState أعلاه تبديل الخاصية Checked خانة الاختيار CheckBox1.

هاك المحمية: ClicksDisabled: = صواب

هناك طريقة أخرى لمنع تنفيذ OnClick ، ​​عند تغيير خاصية Checked لخانة الاختيار بشكل برمجي ، وهي الاستفادة من "مخفي" (محمي) ClicksDisabled خاصية.

من خلال النظر في إجراء SetState الخاص بـ TCheckBox والذي يتم تنفيذه كلما تغيرت الخاصية Checked ، يتم تشغيل OnClick إذا كانت ClicksDisabled غير صحيحة.

نظرًا لأن ClicksDisabled محمي ، لا يمكنك الوصول إليه من التعليمات البرمجية الخاصة بك.

لحسن الحظ ، تتيح لك تقنية الاختراق المحمي الوصول إلى تلك الخصائص الخفية / المحمية لعنصر تحكم Delphi.

يوفر أعضاء الوصول المحميين لأحد المكونات مزيدًا من المعلومات حول هذا الموضوع.

ما عليك القيام به هو إعلان فئة وهمية بسيطة لتوسيع TCheckBox في نفس الوحدة حيث ستستخدم خاصية ClicksDisabled.

بمجرد أن تضع يديك على ClicksDisabled ، قم ببساطة بتعيينه على true ، وقم بتغيير الخاصية Checked ، ثم قم بتعيين ClicksDisabled مرة أخرى إلى false (القيمة الافتراضية):

نوع

TCheckBoxEx = فئة (TCheckBox) ؛



مع TCheckBoxEx (CheckBox1) dobegin

ClicksDisabled: = true؛

تم الفحص: = غير محدد

ClicksDisabled: = false؛

النهاية;

ملاحظة: يقوم الرمز أعلاه بتبديل خاصية Checked في مربع الاختيار المسمى "CheckBox1" باستخدام خاصية ClicksDisabled المحمية.

بناء التطبيقات مع دلفي