• 0
PARADISE

the user control

سؤال

السلام عليكم

عندى سؤال بخصوص ال user control

انشأت user control يتكون من مجموعة من الأزرار

كما انشأت ال properties ال public التى اريد تغييرها عند استخدام هذا ال user control

والحمد لله كل شئ تمام الى الان

لكنى اريد انشاء Click Event خاص بكل button على حدة

واريد الاوامر التى بداخل هذا الـ event ان يتم كتابتها اثناء ال design عند استخدام هذا ال user control الذى انشأته

بمعنى ان يكون بمقدورى تغيير الكود الخاص بال event حسب الفورم التى استخدم ال user control فيها

فكيف يتم ذلك؟؟؟

ولكم منى جزيل الشكر

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

9 إجابة على هذا السؤال .

  • 0

يمكنك استخدام السمة (Attribute) التي تسمى Browsable تضعها قبل الخاصية أو الحدث .

صيغتها.

[Browsable(true)]

// put here the def. of the event.

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

الذي يحدث في ال User Control طبيعي للغاية حيت ان الهيكلية الهرمية للإحداث في Windows تعمل بهذه الطريقة بالضبط

بالطبع لتخطيها يمكن اضافة انواع جديدة من الاحداث لل User Control نفسه ليحول احداث زر ما الى الخارج

الطريقة سهلة للغاية، في ال User Control يجب وضع الكود التالي


public event System.EventHandler MyEvent;

و عند الضغط على الزر بداخل ال User Control يجب ارسال حدث MyEvent الى الخارج بالكود التالي:


private void button1_Click(object sender, System.EventArgs e)
{
System.EventArgs MyEv = new System.EventArgs();
this.MyEvent(this,MyEv);
}

و هكذا سوف يرسل هذا الحدث من داخل ال User Control الى خارج ال User Control

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

يبدو أن الأخ يريد أن يجعل أداة الـ User Control كما هو الحال في كل الأدوات الموجودة في بيئة التصميم .

أي أنه يريد أن يجعل الأحداث ظاهرة أثناء التصميم ويستطيع استخدامها بواسطة الفيجوال ستوديو نفسه هذا ما فهمته من الأخ ... ولا أعلم إن كان هذا هو المطلوب !

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم

شكرا جزيلا على الرد السابق وجزاكم الله كل الخير

وبالفعل تمكنت من انشاء

user control

وانشأت له ال

properties and events

لكن المشكلة الان مختلفة قليلا:

أحد أزرار الــ

user control

الذى انشأته يقوم باغلاق الفورم عند الضغط عليه وكتبت سطر الكود التالى

this.Close();

ولكن ظهر لى الخطأ التالى:

'ours.dml' does not contain a definition for 'Close'

where :

ours is the namespace

dml is the user control I had created

وكل ما أريده هنا هو عندما اضغط على الزر الذى يوجد بداخل الـ

user control

يتم اغلاق الفورم الحالية والتى تحتوى على هذا ال

user control

فكيف يتم ذلك؟

ولكم منى جزيل الشكر والامتنان

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

ألف شكر لكم أخوانى

لقد انشأت ال

usert control+ events + properties

بالاضافة للوظائف العامة مثل

close

لكن اذا اردت استدعاء

method

معرفة في كل فورم على حدة

على سبيل المثال

form1.validate_form()

و

form2.validate_form()

و

form3.validate_form()

ما اريده هو عند الضغط على زر معين في ال

user control

يقوم باستدعاء هذه ال

method

التى تسمى

validate_form

ويقوم باستدعائها من الفورم الذي يوجد ال

user control

بداخله

لقد قمت بذلك عن طريق

creating events for the user control and using it in the form witch containing the user control

لكن الا توجد طريقة اسهل ومباشرة أكثر

؟؟؟؟؟؟

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

يمكن صناعة From معينة و تسميتها MyForm و وضع بداخلها امر ال Validate_Form

الان بداخل ال Forms العادية يجب تغير الوراثة اعلى الكود ليصبح بدل من Form الى MyForm ، الامر سهل و لن يحدث هناك اية تغير في طريقة التعامل معها، ولكنها سوف تورث من MyForm

في ال Form الجديدة يمكن اعادة تعريف الامر Validate_Form الخاص بهذه الفورم، في الفورم الرئيسية MyForm سوف يكون فارغ و في كل فورم خاصة سوف يضع الكود الخاص بها و اعادة التعريف سوف تتم عبر override للامر Validate_Form

الان من ال user control كل المطلوب هي استخدام الاسقاط للفورم الرئيسية كالتالي

((MyForm) this.FindForm()).Validate_Form();

هذه القطعة سوف تنادي الامر Validate_Form الذي سوف يصدف في الفورم الحالية، لانها من نفس نوع الفورم الرئيسية التي تحمل نفس الامر

السابق يعتمد على الوراثة

هناك طريقة اخرى تعتمد على ال Interface

كتابة Interface فارغ به الامر الجديد Validate_Form و اضافته الى الفورم المطلوبة، و عمل الاسقاط كالسابق ولكن على ال Interface ، بهذه الطريقة سوف نتخلى عن الوراثة ، الطريقتين سهلتين للغاية، انا بافضل الوراثة، هناك من يفضل ال Interface ، انا شخصيا باستخدم ال Interface نادرا عندما لا يمكنني استخدام الوراثة.

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

:b1 :b1 :b1 :b1 :b1

(yess) (yess) (yess) (yess) (yess)

(light) (light) (light) (light) (light)

ألف شكر

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
زوار
This topic is now closed to further replies.

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .