سؤال

لتجنب المتغيرات الفردية والمتغيرات العامة، أود أن أكون قادرًا على تمرير المعلمات إلى مكون TFrame.ومع ذلك، نظرًا لأن TFrame يتم تضمينه عادةً في النموذج في وقت التصميم، فمن الممكن فقط استخدام المنشئ الافتراضي.

يمكن للنموذج الأصلي بالطبع تعيين بعض الخصائص في رد الاتصال OnCreate بعد إنشاء TFrame.لكن هذا لا يضمن عدم نسيان الخاصية، كما أن التبعيات ليست واضحة مثل استخدام المُنشئ.

ستكون الطريقة الجيدة هي أن يكون من الممكن تسجيل مصنع لإنشاء المكونات أثناء قراءة ملف dfm.ومن ثم يمكن تمرير المعلمات المطلوبة إلى مُنشئ TFrame عند إنشائها بواسطة المصنع.هل هناك طريقة لتحقيق ذلك؟

أو هل لدى أي شخص حل أفضل حول كيفية تمرير المعلمات إلى TFrame؟

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

المحلول

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

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

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

نصائح أخرى

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

تأكد خصائص باي أو الخاصة إن أمكن، وبالتالي فإن الطريقة الوحيدة التي يمكن وضعها هو من يدعو التهيئة (AFoo، ابار: صحيح).

وبعد ذلك في TFormXXX.FormCreate أو TformXXX.Create، يكون لديك:

inherited;
Initialise(foo, bar);

ويمكنك إنشاء / registercomponent عنصر tFrame الخاصة بك و وضع ذلك على شكل - انها خلق يمكن أن يكون أي شيء مرت به

إذا مصنع يمكن أن توفر المعلمات التي تحتاج إليها، لماذا لا مجرد تجاوز المنشئ الافتراضي لالإطار الخاص بك، ونطلب من الدرجة مصنع لمعلمات؟

وأنا عادة أجعل منشئ الخاصة. أنا لا أحب أن إنشاء إطارات في designtime على أي حال.

أ) يمكن إنشاء الإطار ديناميكيًا عند الحاجة إليه وتدميره عند عدم الحاجة إليه

ب) منح الإطار خاصية عامة إما بنوع بيانات المعلمة أو بنية البيانات وتمرير القيم إلى النموذج من خلال الخاصية.

مثال:
TAddress - فئة تحتوي على العناصر المعتادة للعنوان.
TAddressFra - إطار يحتوي على عناصر تحكم مرئية لعرض العنوان

  • ملء مثيل ل TAddress مع القيم
  • إنشاء مثيل ل TAddressFra
  • تعيين TAddressFra.address الملكية مع TAddress مثال
  • استخدم هذا الإجراء setAddress(o_address : TAddress) لتعيين قيم TAddress سمات للمكونات البصرية المقابلة على TAddressFra
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top