السلام عليكم ورحمة الله وبركاته ..
هذا موضوع قديم وهو نفس ما أريد ولكن لم يكتمل ( الحلو ما يكمل )
وسؤالي هو :
لو قمت بإضافة 10 ازرار Command بالكود
كيف أقوم بوضع حدث لكل العشر أزرار ..
وشكرا
وأرفقت مثال للتوضيح أكثر
السلام عليكم ورحمة الله وبركاته ..
هذا موضوع قديم وهو نفس ما أريد ولكن لم يكتمل ( الحلو ما يكمل )
وسؤالي هو :
لو قمت بإضافة 10 ازرار Command بالكود
كيف أقوم بوضع حدث لكل العشر أزرار ..
وشكرا
وأرفقت مثال للتوضيح أكثر
السلام عليكم...
لقد رأينا في موضوعك السابق إضافة Label في Picture كيفية إنشاء عنصر جديد بالكود، و ذلك بالتصريح عن المتغير الذي يمثل العنصر مع استعمال كلمة WithEvents ثم استعمال Controls.Add. و هذه الطريقة سهلة جداً و عملية إذا كان عدد العناصر قليلاً (اثنين أو ثلاثة مثلاً). لكن إذا كنت تريد إضافة العديد من العناصر، 10 مثلاً كما ذكرت في سؤالك، فلا شك أن استعمال مصفوفة سيكون أسهل بكثير. لكن للأسف لا يمكن استعمال كلمة WithEvents عند التصريح عن مصفوفة، و بالتالي فإن أفضل و أسهل طريقة (و ربما الوحيدة) هي إنشاء مصفوفة مكونات (Control Array):
1. ضع زر (Command1 مثلاً) على الـ Form.
2. اضبط الخاصية Index للـ Command1 على 0. سيتم تلقائياً إنشاء مصفوفة اسمها Command1 تحتوي حالياً على عنصر واحد رقمه 0.
3. لإنشاء 10 أزرار إضافية اكتب في الحدث Form_Load كود كالتالي
طبعاً يمكنك استعمال الحلقة فقط لتحميل الأزرار ثم ضبط بقية الخصائص لكل زر على حدة، مثلاً:
أما بالنسبة إلى تعيين معالجات الأحداث لتلك الأزرار فالمسألة محلولة أصلاً. إذا كان العنصر أو المكون جزءاً من مصفوفة مكونات فإن جميع الأحداث المتعلقة بذلك العنصر لها بارامتر إضافي اسمه Index و هو يشير إلى رقم العنصر الذي استدعى الإجراء.
إذن انقر نقراً مزدوجاً على الـ Command1 الذي وضعته على الـ Form و ستجد أن الإجراء Click كالتالي:
لاحظ وجود البارامتر Index.
للاستجابة لزر معين من تلك الأزرار العشرة اختبر قيمة البارامتر Index باستعمال جملة Select Case كالتالي:
نرجو الاستفادة و السلام.
وَ قُلِ اعْمَلُوا فَسَيَرَى اللهُ عَمَلَكُمْ وَ رَسُولُهُ وَ الْمُؤْمِنُونَ
صدق الله العظيم
أخي العزيز للأسف لا أريدها بالحدث load
أريدها كما هي سابقاً
Set lblName(n) = Me.Controls.Add("VB.CommandButton", "lblName" & n)
أي بمعنى
لا اريد إضافة أي زر على الفورم ...
لأن مشروعي يتطلب ذلك ..
وجزاك الله خير ...
اتمنى عدم اهمال سؤالي ..
لأني محتاجه ضروري ..
وجزاكم الله خير
:happy: :wink: :wacko:
أخي najy_zl
معليش أخي بس أنت تقوك
( بالتالي فإن أفضل و أسهل طريقة (و ربما الوحيدة) ) فالحقيقة ليست الوحيدة وهناك طريقة أنا متأكد منها ..
لدي كود شاهدته في أحد المواقع حل مشكلتي ولكن أريد إضافة أحداث مثل Clcik و dblClick و MouseMove وغيرها
شاهد الكود وأعطيني رأيك ولو تعدل عليه أكون لك من الشاكرين ...
تحملوني ولكني فعلاً محتاج الكود ...
هذا كود لا يوجد به كلمة ( load ) مطلقاً وفيه عدد لا نهائي من الكومند وفيه بكل زر حدث ...
السلام عليكم...
و الله زمان على بعض التفاصيل في Visual Basic (منذ أن أخذتنا دلفي). شكراً على التذكير.
الفكرة الموجودة في البرنامج المرفق في مشاركتك السابقة ممتازة. فطالما أنه لا يمكننا استعمال WithEvents لإنشاء مصفوفة مكونات مع أحداثها، إذن يمكننا إنشاء صنف (Class) وظيفته الوحيدة الاحتفاظ بالمكون (بعد إنشائه) و معالجة الأحداث المرتبطة به.
البرنامج المرفق يستعمل نفس الفكرة مع إجراء عدة تعديلات بحيث يمكننا إنشاء عدة أزرار - سواء أكانت في مصفوفة أو منفردة - مع إمكانية تعيين أية معالجات أحداث نريد تعيينها لها. و أضفت إليها إجراءً لتغيير معالج حدث معين بمعالج آخر، بمعنى أن الزر الأول مثلاً نحدد له في البداية إجراءً معيناً لتنفيذه عند النقر، ثم نستطيع في مكان آخر في الكود أن نجعله ينفذ إجراءً آخر عند النقر.
و لتوضيح أنه يمكن تطبيق ذلك على أنواع أخرى من المكونات فقد أضفت Class Module أخرى لإنشاء مكونات TextBox و تعيين معالجات أحداث لها.
سنلاحظ التطابق شبه التام بين الـ Class Module الخاصة بالأزرار CButtonHolder.cls و تلك الخاصة بمربعات النص CTextBoxHolder.cls. الفرق فقط في نوع المكون الذي تنشئه و تحتفظ به الـ Class و في معالجات الأحداث التي نريد التعامل معها.
سنلاحظ كذلك التشابه التام بين جميع معالجات الأحداث في الـ Class Module، فجميعها تتكون من 5 أسطر لا غير.
أما معالجات الأحداث الفعلية (التي سنكتب فيها الكود المطلوب تنفيذه عند النقر على الزر مثلاً) فهي عبارة عن إجراءات مكتوبة في الـ Form نفسها، و يجب تعريفها على أنها Public، لكن الممتع في الأمر أنها جميعاً تأخذ نفس الشكل في تعريفها:
حيث eventName هو اسم الإجراء، مثلاً MyButtonClick أو MyTextBoxKeyPress أو ِAbcXyz أو أي اسم نريده.
لقد وضعت شرحاً مفصلاً - بالإنجليزي - ضمن الكود المرفق، و أنا على استعداد لأية توضيحات أخرى.
نرجو الاستفادة و السلام.
وَ قُلِ اعْمَلُوا فَسَيَرَى اللهُ عَمَلَكُمْ وَ رَسُولُهُ وَ الْمُؤْمِنُونَ
صدق الله العظيم
والله يا أخوي يعجز اللسان عن شكرك ...
جزاك الله خير
:lol:
المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية
جارٍ التحقق من المتواجدين…